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

      

  • 相关阅读:
    百万英雄答题值不值得您继续参加
    一个程序员&自媒体人的2017年终总结
    送书福利又来了,总共10本程序员技术书
    CCF 201912-2 回收站选址(100分)Java
    CCF 201912-1 报数 (100分)Java
    CCF 201909-2 小明种苹果(续)(100分)Java
    CCF 201909-1 小明种苹果(100分)Java
    初识JWT
    Redis学习——事务、消息订阅和发布
    Redis学习——数据类型及操作
  • 原文地址:https://www.cnblogs.com/pxblog/p/12150027.html
Copyright © 2020-2023  润新知