前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网站接入第三方登录功能:Java开发QQ登录

网站接入第三方登录功能:Java开发QQ登录

作者头像
sunonzj
发布2022-06-21 14:25:03
1.3K0
发布2022-06-21 14:25:03
举报
文章被收录于专栏:zjblog

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标签来登录。

代码语言:javascript
复制
<a  class="qq" href="<%=path%>/qqLogin"><img alt="QQ登录" title="QQ登录" src="img/QQ.png"></a>

点击QQ登录,然后就是执行qqLogin,

Controller代码

代码语言:javascript
复制
/**
     * 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登录点击登录后执行回调方法。就是创建应用时填的

代码语言:javascript
复制
/**
     * 登录回调
     */
    @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登录功能就完成了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档