首先在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
<dependency> <groupId>net.gplatform</groupId> <artifactId>Sdk4J</artifactId> <version>2.0</version> </dependency>
把qqconnectconfig.properties 放在項目資源目錄下
配置三個參數
點擊QQ跳轉第三方請求后台代碼(官方demo代碼)
/** * 第三方登錄 授權 * * @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代碼)
@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) { } }