微信扫一扫关注个公众号。谢谢各位

第一步:https://connect.qq.com/去此网站进行授权(需要用到域名,域名需要备案通过)

审核通过后。拿到appid

第二步:前端定义个按钮,为按钮绑定好事件(client_id==appid)

window.location.href ="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=******&state=register&redirect_uri="+encodeURI("http://zhdydet.xyz:8085/api/qqLogin");//http://zhdydet.xyz:8085/api/qqLogin===>回调地址(qq第三方)

第三步:编写后台回调代码

//具体此代码要根据业务来。我这边用的是shiro权限框架。回调后。默认进行shiro登录授权,以及根据openid进行添加和修改用户信息

@RequestMapping("/qqLogin")
public void  qqLoginAfter(HttpServletResponse response, HttpServletRequest request) {try{HttpSession session = request.getSession();String code = request.getParameter("code");String state = request.getParameter("state");String uuid = (String) session.getAttribute("state");if(uuid != null){if(!uuid.equals(state)){//throw new Exception("QQ,state错误");}}//Step2:通过Authorization Code获取Access TokenString url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code"+"&client_id=" + QQHttpClient.APPID +"&client_secret=" + QQHttpClient.APPKEY +"&code=" + code +"&redirect_uri=" + QQHttpClient.CALLBACK;String access_token = QQHttpClient.getAccessToken(url);//Step3: 获取回调后的 openid 值url = "https://graph.qq.com/oauth2.0/me?access_token=" + access_token;String openid = QQHttpClient.getOpenID(url);//Step4:获取QQ用户信息url = "https://graph.qq.com/user/get_user_info?access_token=" + access_token +"&oauth_consumer_key="+ QQHttpClient.APPID +"&openid=" + openid;User user =   userService.selectByOpenId(openid);JSONObject jsonObject = QQHttpClient.getUserInfo(url);String avatarImg = jsonObject.getString("figureurl_qq");String nickname = jsonObject.getString("nickname");String gender = jsonObject.getString("gender");User user1 = new User();Subject subject = SecurityUtils.getSubject();if(user == null){user1.setRealName(nickname);user1.setPicture(avatarImg);user1.setOpenID(openid);user1.setUserName(openid);String salt = getSalt();user1.setSalt(salt);String password = MD5Utils.MD5Encode(openid+"_"+salt+"_"+"123456","utf-8");user1.setPassword(password);user1.setRoleId(5);user1.setAddTime(new Date());this.userService.insertUser(user1);UsernamePasswordToken info = new UsernamePasswordToken(openid, "123456");subject.login(info);// response.sendRedirect("/api/index");}else{user1.setRealName(nickname);user1.setPicture(avatarImg);user1.setOpenID(openid);user1.setUserName(openid);user1.setId(user.getId());user1.setUpdateTime(new Date());this.userService.updateUser(user1);UsernamePasswordToken info = new UsernamePasswordToken(openid, "123456");subject.login(info);}redisTemplate.opsForValue().set("user:info"+":"+subject.getSession().getId(),user1,1L, TimeUnit.HOURS);response.sendRedirect("/api/index");response.setStatus(200);}catch (IOException e){}
}

QQHttpClient类

需要用到的maven依赖

<!--httpclient-->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version>
</dependency>
package com.bus.utils;import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;import java.io.IOException;/*** @author wwz* @date 2019-07-24* @descrption:*/
public class QQHttpClient { //QQ互联中提供的 appid 和 appkeypublic static final String APPID = "**********";public static final String APPKEY = "*********";public static final String CALLBACK = "http://zhdydet.xyz:8085/api/qqLogin";private static JSONObject parseJSONP(String jsonp){int startIndex = jsonp.indexOf("(");int endIndex = jsonp.lastIndexOf(")");String json = jsonp.substring(startIndex + 1,endIndex);return JSONObject.parseObject(json);}public static String getAccessToken(String url) throws IOException {CloseableHttpClient client = HttpClients.createDefault();String token = null;HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if(entity != null){String result = EntityUtils.toString(entity,"UTF-8");if(result.indexOf("access_token") >= 0){String[] array = result.split("&");for (String str : array){if(str.indexOf("access_token") >= 0){token = str.substring(str.indexOf("=") + 1);break;}}}}httpGet.releaseConnection();return token;}public static String getOpenID(String url) throws IOException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if(entity != null){String result = EntityUtils.toString(entity,"UTF-8");jsonObject = parseJSONP(result);}httpGet.releaseConnection();if(jsonObject != null){return jsonObject.getString("openid");}else {return null;}}public static JSONObject getUserInfo(String url) throws IOException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if(entity != null){String result = EntityUtils.toString(entity,"UTF-8");jsonObject = JSONObject.parseObject(result);}httpGet.releaseConnection();return jsonObject;}
}

感谢观看,可以在微信搜索公众号  威信交流,以后准备在 公众号更新一些文章

qq 第三方登录 前后端实现相关推荐

  1. 微信第三方登录前后端分离实现思路

    微信第三方登录前后端分离实现思路 前端实现 这里说一下前后端的思路,页面加载时声明一个变量state='时间戳+6位随机数', 前端路径生成二维码, 其中有个state参数需要我们传递,这个参数你传什 ...

  2. facebook第三方登录前后端分离

    facebook第三方登录三种实现方式:第三种我认为方便简单 1.js sdk 直接在官网看文档 直接调用他的sdk 官网:https://developers.facebook.com/docs/f ...

  3. python实现QQ第三方登录

    应用接入前,首先需进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权.http://wiki.connect.qq.com/__trashed-2 QQ登录 ...

  4. Vue + Java 实现QQ第三方登录授权

    一.前言 Vue 实现QQ第三方登录授权需要获取到 APP_ID和回调域地址,关于这2个的获取方式可以参考小编的另外一篇文章 Java 实现QQ第三方登录 温馨小提示: 本文基于springboot+ ...

  5. QQ第三方登录-QQ互联开发者申请的坑(个人接入,时间:2019-6-3)

    本人博客全部迁至个人博客,柒情博客:http://www.ityw.club ,后续所有博客将在柒情博客上进行更新. 前阵子项目准备使用QQ第三方登录,需要使用QQ第三方登录的话需要申请QQ互联认证, ...

  6. web实现QQ第三方登录

    web实现QQ第三方登录 开放平台-web实现QQ第三方登录 应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1  注册成为QQ互联平台开发者, http://connect.qq.c ...

  7. 公司网站如何让用户使用QQ第三方登录

    我们做了一个中农物联网系统,为了简化用户使用门槛,并保证用户资料安全,准备在自身的用户管理基础上加入第三方登录,主要是QQ登录.微信二维码扫描登录.手机微信登录等.     QQ第三方登录,用的是QQ ...

  8. JavaWeb实现QQ第三方登录

    在开发过程中需要使用QQ第三方登录,但发现网上的资料都有点不同,很多还有些误导,这里就详细说下具体的实现吧! 1.在QQ互联上申请成为开发者 网址:https://connect.qq.com/ind ...

  9. QQ第三方登录报错error=-1

    qq 第三方登录报错error=-1 再次实例化qc类.

最新文章

  1. “深度学习一点也不难!”
  2. JAR软件转APK,在线转换器
  3. python算法与数据结构-快速排序算法(36)
  4. CodeForces 839D - Winter is here | Codeforces Round #428 (Div. 2)
  5. Windows7下Docker的安装
  6. 分治算法兵乓球比赛日程(java)
  7. 使用TensorFlow.js的AI聊天机器人六:生成莎士比亚独白
  8. U 盘无法拷贝大于 4GB 文件的解决方法
  9. mysql主从复制延迟问题的相关知识与解决方案
  10. [TJOI 2015] 线性代数
  11. 测试了几款mysql监控工具
  12. qt在linux下编译资源文件,linux下Qt qrc文件的编写与应用
  13. 人机工程学产品设计案例_专业解读——产品设计
  14. Linux-tftp、tftpd-pha安装、使用、配置教程
  15. Joplin使用坚果云WebDAV同步存在的问题以及解决办法
  16. NameNode作用
  17. [Fourier]傅里叶级数中虚数部分j去了哪里
  18. 坪山体育中心体育馆全景不同高度展示
  19. 第一章 略说中医的学习与研究(4)
  20. 真正解决Could not transfer artifact org.springframework.bootspring-boot-starter-parentpom

热门文章

  1. 【Mybatis+spring整合源码探秘】--- mybatis整合spring事务原理
  2. ICS与NAT上网结构
  3. 清华学生“边骑车边用电脑”走红,被封“学堂路车神”!本人回应
  4. 华为不能设置默认闹钟铃声
  5. 淇℃伅 Tomcat日志乱码的办法
  6. 67-套接字超时(select)
  7. 2012时刻保持一颗感恩的心
  8. [CISCN2020]-rceme
  9. 消费新品周报 | 李宁推出超轻16代跑鞋;天梭表发布11款全新腕间时计作品
  10. xp系统无线配置服务器,TP-Link无线路由器上网设置(XP 系统)