生活不易、且行且珍惜。网站首页 程序人生
网站接入第三方登录功能:Java开发QQ登录
发布时间:2018-11-07 17:00编辑:zj 阅读:3694文章分类:Java互动QQ群:170915747
QQ登录确实比自己注册账户登录要方便的多,所以就搞了个QQ登录。QQ互联开放平台为第三方网站提供了丰富的API。第三方网站接入QQ互联开放平台后,即可通过调用平台提供的API实现用户使用QQ帐号登录网站功能,且可以获取到腾讯QQ用户的相关信息。
准备工作
首先得去QQ开放平台注册个账号https://connect.qq.com/index.html
申请为开发者,需要审核,审核通过后创建网站应用,也要审核。 根据要求填好资料提交审核就OK。
创建好后会得到APPID和APP key。创建应用时填写的回调地址很重要(回调地址可以改的,方便测试),是在QQ登录后执行的。

java SDK下载http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/doc/qqConnect_Server_SDK_java_v2.0.zip
下载完后把Sdk4J.jar导入到项目中,还有qqconnectconfig.properties放到资源文件中。
qqconnectconfig.properties需要修改一些内容。

然后就是代码了。因为比较简单,就贴一下吧。
前端,通过a标签来登录。
<a class="qq" href="<%=path%>/qqLogin"><img alt="QQ登录" title="QQ登录" src="img/QQ.png"></a>
点击QQ登录,然后就是执行qqLogin,
Controller代码
/**
     * QQ登录
     */
    @RequestMapping("/qqLogin")
    public void qqLogin(HttpServletRequest request, HttpServletResponse response) {
        try {
            response.setContentType("text/html;charset=utf-8");
            response.sendRedirect(new Oauth().getAuthorizeURL(request));
        } catch (QQConnectException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }弹出QQ登录点击登录后执行回调方法。就是创建应用时填的
/**
     * 登录回调
     */
    @RequestMapping("回调路由")
    public String qqCallBack(HttpSession session, HttpServletRequest request, HttpServletResponse response) {
        response.setContentType("text/html;charset=utf-8");
        try {
            AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
            String accessToken = null, openID = null;
            long tokenExpireIn = 0L;
            if (accessTokenObj.getAccessToken().equals("")) {
              
                return "404";
            }
            accessToken = accessTokenObj.getAccessToken();
            tokenExpireIn = accessTokenObj.getExpireIn();
          
            // 利用获取到的accessToken 去获取当前用的openid
            OpenID openIDObj = new OpenID(accessToken);
            openID = openIDObj.getUserOpenID();
           
            String icon = null, nickName = null, sex = null;
            // 去获取用户在Qzone的昵称等信息
            com.qq.connect.api.qzone.UserInfo qzoneUserInfo =
                new com.qq.connect.api.qzone.UserInfo(accessToken, openID);
            UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
            if (userInfoBean.getRet() == 0) {
                nickName = userInfoBean.getNickname();
                sex = userInfoBean.getGender();
                if (userInfoBean.getAvatar().getAvatarURL100() == null) {
                    icon = userInfoBean.getAvatar().getAvatarURL50();
                }
                icon = userInfoBean.getAvatar().getAvatarURL100();
                // userInfoBean.getAvatar().getAvatarURL50();
                // userInfoBean.getAvatar().getAvatarURL100();
            }
            // 自己网站的用户实体类,根据openId查询是否已存在
            UserInfo userInfo = new UserInfo();
            userInfo.setOpenId(openID);
            UserInfo localUser = userInfoService.selectByOpenId(userInfo);
            if (localUser != null) {
                // 老用户处理
                //你需要的业务操作
            } else {
                // 新用户处理
                UserInfo userInfos = new UserInfo();
                userInfos.setUserId(Tools.getUniqueId());
                userInfos.setUserName(nickName);
                userInfos.setSex(sex);
                userInfoService.save(userInfos);
                //你需要的业务操作
            }
        } catch (QQConnectException e) {
            e.printStackTrace();
        }
        return "redirect:/index";
    }一个简单的QQ登录功能就完成了。



#去评论一下
标签:#QQ登录
版权声明:本博客的所有原创内容皆为作品作者所有
转载请注明:来自ZJBLOG 链接:www.zjhuiwan.cn
			33 +1
		「万物皆有时,比如你我相遇」
感谢大佬打赏【请选择支付宝或微信,再选择金额】
使用微信扫描二维码完成支付
			

![[冒泡专用表情]](https://www.zjhuiwan.cn/images/images/zjemogi.png)
![[哈哈]](https://www.zjhuiwan.cn/images/images/laugh.gif)
![[衰]](https://www.zjhuiwan.cn/images/images/cry.gif)
![[伤心]](https://www.zjhuiwan.cn/images/images/unheart.gif)
![[猪头]](https://www.zjhuiwan.cn/images/images/pig.gif)
![[蛋糕]](https://www.zjhuiwan.cn/images/images/cake.gif)