【第三方互联】3、腾讯QQ授权第三方登录

【第三方互联】3、腾讯QQ授权第三方登录当我们创建的互联应用成功后 我们便可以开始使用该应用来实现互联一 获取 APPID 和 APPKey1 找到我的应用 2 点击应用 进入详情这样 我们就获取到了 APPID 和 APPKey 二 进行开发 1 将 APPID APPKey 以及该应用的信息放入项目中的配置文件中 我使用的是 SpringBoot 我放在了 application y

当我们创建的 互联应用成功后,我们便可以开始使用该应用来实现 互联

一、获取 APP ID 和 APP Key

二、 授权登录进行开发

  • 二、添加 Maven 依赖,在 pom.xml 文件中,我们需要加入以下依赖信息
<!-- 网络请求 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> 

其他依赖,请自行加入

三、登录按钮

在页面放置 授权登录的 DOM 元素

<a th:href="@{/auth}" class="link" title="腾讯登录"><i class="layui-icon">&#xe676;</i></a> 

四、接口类

创建 授权登录的 Controller,QqController.java

1、从配置文件中获取 互联信息

/ * 互联中提供的 appid 和 appkey */ @Value("${.oauth.appid}") public String APPID; @Value("${.oauth.appkey}") public String APPKEY; @Value("${.oauth.url}") public String URL; 

定义三个变量,接收 互联的信息

2、登录按钮点击后的接口

/ * 请求授权页面 */ @GetMapping(value = "/auth") public String Auth(HttpSession session) { 
    // 用于第三方应用防止CSRF攻击 String uuid = UUID.randomUUID().toString().replaceAll("-", ""); session.setAttribute("state", uuid); // Step1:获取Authorization Code String url = "https://graph..com/oauth2.0/authorize?response_type=code" + "&client_id=" + APPID + "&redirect_uri=" + URLEncoder.encode(URL) + "&state=" + uuid; return PasswordUtils.redirectTo(url); } 

3、我们在授权页面,登录了 账号,并同意授权后,就回到了我们创建应用是设置的回调地址里面了

/ * 授权回调 */ @GetMapping(value = "/callback") public String Callback(HttpServletRequest request) throws Exception { 
    HttpSession session = request.getSession(); // 得到Authorization Code String code = request.getParameter("code"); // 我们放在地址中的状态码 String state = request.getParameter("state"); // 验证信息 String uuid = (String) session.getAttribute("state"); // 验证信息我们发送的状态码 if (null != uuid) { 
    // 状态码不正确,直接返回登录页面 if (!uuid.equals(state)) { 
    return PasswordUtils.redirectTo("/login"); } } // Step2:通过Authorization Code获取Access Token String url = "https://graph..com/oauth2.0/token?grant_type=authorization_code" + "&client_id=" + APPID + "&client_secret=" + APPKEY + "&code=" + code + "&redirect_uri=" + URL; String access_token = QqHttpClient.getAccessToken(url); // Step3: 获取回调后的openID url = "https://graph..com/oauth2.0/me?access_token=" + access_token; String openId = QqHttpClient.getOpenID(url); // Step4:获取用户信息 url = "https://graph..com/user/get_user_info?access_token=" + access_token + "&oauth_consumer_key=" + APPID + "&openid=" + openId; // 得到用户信息 JSONObject jsonObject = QqHttpClient.getUserInfo(url); / * 获取到用户信息之后,就该写你自己的业务逻辑了 */ return PasswordUtils.redirectTo("/success"); } 

以上代码,从我自己的项目中拷贝而来,如果你直接使用,你需要对其业务代码进行修改

五、网络请求方法

第四步代码中所用到的网络接口方法,我放在了 QqHttpClient.java 文件中,主要有三个方法

/ * 获取Access Token */ 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; } / * 获取openID */ 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; } / * 转换json对象 */ 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); } 

以上,就是完成 授权登录的过程

六、总结

下一篇:

【互联】四、分享至、新浪微博

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198262.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:27
下一篇 2026年3月26日 下午3:28


相关推荐

  • python一个中文占几个字节_中文在python中占几个字节

    python一个中文占几个字节_中文在python中占几个字节如果是 utf 8 编码 那么一个中文字符占用三个字节 一个英文字符占用一个字节 如果是 gbk 编码 那么一个中文字符占用两个字节 一个英文字符占用一个字节 如果是 utf 8 编码 那么一个中文包含繁体字等于三个字节 一个英文字符等于一个字节 如果是 gbk 编码 那么一个中文包含繁体字等于两个字节 一个英文字符等于一个字节 我们可以用如下方法来判断 中文和符号 print type 中文 encode

    2026年3月17日
    2
  • EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)「建议收藏」

    EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)「建议收藏」EasyPlayer实现视频的局部缩放、平移功能(类似快手视频)在预览图片的时候,利用手势控制图片的缩放、平移,已经是智能手机时代最基本的操作。而对于视频,很少有播放器支持这样的操作。实际上,在观看视频的时候,我们可能会想观看某个区域的局部细节,需要把该区域放大来观看,EasyPlayer播放器基于这样的需求,提供了局部放大的功能。感谢github上开源库PhotoView,它在ImageView

    2022年6月29日
    80
  • 一阶倒立摆的起摆与稳摆simulink仿真

    一阶倒立摆的起摆与稳摆simulink仿真**一阶倒立摆的起摆与稳摆simulink仿真**目录:倒立摆的稳定倒立摆的起摆模型仿真结果1.倒立摆的稳定根据现代控制工程这本书中介绍的状态反馈法控制其中J为配置的极点矩阵,K为得到的反馈增益矩阵。搭建simulink模型,并加入一个阶跃信号。稳摆的结果(下图分别为小车的位移和摆杆的角度)2.倒立摆的起摆起摆过程中采用能量法3.模型仿真结果根据…

    2022年8月18日
    14
  • DeepSpeed 教程

    DeepSpeed 教程

    2026年3月15日
    2
  • java如何实现换行_网页换行代码

    java如何实现换行_网页换行代码在taxtarea中输入的文本。如果含有回车或空格。在界面上显示的时候则不哪么正常。回车消失了,空格变短了。如何解决这个问题呢。有2种方法。1.使用标签w3c对pre元素是这样定义的:pre元素可定义预格式化的文本。被包围在pre元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。更详细的内容请参考http://www.w3school.com.cn/tags/tag_pre.a…

    2025年6月8日
    4
  • 03LaTeX学习系列之—TeXworks的使用

    03LaTeX学习系列之—TeXworks的使用

    2021年7月2日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号