zoukankan      html  css  js  c++  java
  • 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

    <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) {
            }
        }
    

      

  • 相关阅读:
    171. Excel Sheet Column Number (Easy)
    349. Intersection of Two Arrays (Easy)
    453. Minimum Moves to Equal Array Elements (Easy)
    657. Judge Route Circle (Easy)
    CSS笔记
    保存页面状态
    UI开发总结
    ubuntu 下配置munin
    反向代理配置
    JavaScript 高级程序设计第二版
  • 原文地址:https://www.cnblogs.com/pxblog/p/12150027.html
Copyright © 2011-2022 走看看