JAVA实现QQ第三方登录
首先在QQ互联: https://connect.qq.com/manage.html 申请账号,并且进行资料审核,同时创建应用(设置回调地址)
申请应用完后,会有app_ID、app_KEY等参数
官方JAVA SDK demo下载:https://pan.xunlew.com/s86815
官方文档:https://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0
引入jar包 Sdk4J.jar
或者maven
1 2 3 4 5 | <dependency> <groupId>net.gplatform</groupId> <artifactId>Sdk4J</artifactId> <version> 2.0 </version> </dependency> |
把qqconnectconfig.properties 放在项目资源目录下
配置三个参数
点击QQ跳转第三方请求后台代码(官方demo代码)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /** * 第三方登录 授权 * * @return */ @RequestMapping (value = "/to_qq" ) public void toLogin(HttpServletRequest request, HttpServletResponse response) { response.setContentType( "text/html;charset=utf-8" ); try { response.sendRedirect( new Oauth().getAuthorizeURL(request)); } catch (Exception e) { e.printStackTrace(); } } |
回调地址代码(官方demo代码)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | @RequestMapping (value = "/to_third_login/callback" ) public void loginBack(HttpServletRequest request, HttpServletResponse response) { response.setContentType( "text/html; charset=utf-8" ); try { PrintWriter out = response.getWriter(); AccessToken accessTokenObj = ( new Oauth()).getAccessTokenByRequest(request); String accessToken = null , openID = null ; long tokenExpireIn = 0L; if (accessTokenObj.getAccessToken().equals( "" )) { // 我们的网站被CSRF攻击了或者用户取消了授权 // 做一些数据统计工作 System.out.print( "没有获取到响应参数" ); } else { accessToken = accessTokenObj.getAccessToken(); tokenExpireIn = accessTokenObj.getExpireIn(); request.getSession().setAttribute( "demo_access_token" , accessToken); request.getSession().setAttribute( "demo_token_expirein" , String.valueOf(tokenExpireIn)); // 利用获取到的accessToken 去获取当前用的openid -------- start OpenID openIDObj = new OpenID(accessToken); openID = openIDObj.getUserOpenID(); out.println( "欢迎你,代号为 " + openID + " 的用户!" ); request.getSession().setAttribute( "demo_openid" , openID); out.println( "<a href=" + "/shuoshuoDemo.html" + " target=\"_blank\">去看看发表说说的demo吧</a>" ); // 利用获取到的accessToken 去获取当前用户的openid --------- end out.println( "<p> start -----------------------------------利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 ---------------------------- start </p>" ); UserInfo qzoneUserInfo = new UserInfo(accessToken, openID); UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo(); out.println( "<br/>" ); if (userInfoBean.getRet() == 0 ) { out.println(userInfoBean.getNickname() + "<br/>" ); out.println(userInfoBean.getGender() + "<br/>" ); out.println( "<image src=" + userInfoBean.getAvatar().getAvatarURL30() + "/><br/>" ); out.println( "<image src=" + userInfoBean.getAvatar().getAvatarURL50() + "/><br/>" ); out.println( "<image src=" + userInfoBean.getAvatar().getAvatarURL100() + "/><br/>" ); } else { out.println( "很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg()); } out.println( "<p> end -----------------------------------利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 ---------------------------- end </p>" ); } } catch (Exception e) { } } |
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了