springmvc web网站QQ第三方登录实现

首先   申请需要用到的 app_ID 和 app_KEY             具体步骤看这个 https://connect.qq.com/index.html 

再申请的时候会有一个框让你输入 你登录成功的跳转的页面 redirect_URI

id 和 key 都申请下来  修改 qqconnectconfig.properties 文件里面的app_ID 、app_KEY 、redirect_URI

把qqconnectconfig.properties和下载的sdk 放到你的项目中

写第一个类

qq登录的入口

@RequestMapping("qqlogin")
@Controller
public class QqLoginController   {

@RequestMapping("qqlogin")
public void qqlogin(HttpServletRequest request, HttpServletResponse response)  throws IOException {
response.setContentType("text/html;charset=utf-8");
       try {
           response.sendRedirect(new Oauth().getAuthorizeURL(request));
       } catch (QQConnectException e) {
           e.printStackTrace();
       }
}


}

然后登录成功后的回调方法

@RequestMapping("qqloginafter")
@Controller
public class QqLoginAfterController {


private static final Logger logger = LoggerFactory.getLogger(QqLoginAfterController.class);
@Autowired
private  UserService userService;

@RequestMapping("qqloginafter")
public String qqloginafter(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println(request);
response.setContentType("text/html; charset=utf-8");


String redirecturl = null;
try {
            AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
            String accessToken   = null,
                   openID        = null;
            //long tokenExpireIn = 0L;
            if (accessTokenObj.getAccessToken().equals("")) {
//                我们的网站被CSRF攻击了或者用户取消了授权
//                做一些数据统计工作
            logger.info("没有获取到响应参数");
                //System.out.print("没有获取到响应参数");
            } else {
                accessToken = accessTokenObj.getAccessToken();
               //tokenExpireIn = accessTokenObj.getExpireIn();
                request.getSession().setAttribute("qq_access_token", accessToken);
                //request.getSession().setAttribute("demo_token_expirein", String.valueOf(tokenExpireIn));


                // 利用获取到的accessToken 去获取当前用的openid -------- start
                OpenID openIDObj =  new OpenID(accessToken);
                openID = openIDObj.getUserOpenID();
                request.getSession().setAttribute("qq_openid", openID);
                User islogin = SecurityCommonUtils.getCurrentUser();
    if(islogin!=null){
    //个人中心绑定账号跳转页面
    User usernow = userService.getUserById(SecurityCommonUtils.getCurrentUser().getUser_id());
    usernow.setQq_openid(openID);//qq唯一标识
    userService.updateUserBySite(usernow);
    redirecturl = "redirect:/personal/securityset/accountbind/1.shtml";
    }else{
                //根据openid去查询
                User user = userService.getUserByQqOpenId(openID);
               if(user==null){
                //找不到用户重定向到绑定手机页面
                //System.out.println("找不到用户重定向到绑定手机页面");
                redirecturl = "redirect:/qqandwechat/bindphone/0.shtml";
               }else{
                SavedRequest savedRequest = WebUtils.getSavedRequest(request);
String url = null ;
if(null != savedRequest){
//System.out.println("跑到上一次访问页面");
url = savedRequest.getRequestUrl();
redirecturl = "redirect:"+url;
}else{
//System.out.println("跑到首页");
redirecturl = "redirect:/qqandwechat/index/0.shtml";
}
               }
    }
                /*// 利用获取到的accessToken 去获取当前用户的openid --------- end
                UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
                UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
                if (userInfoBean.getRet() == 0) {
               
                } else {
               
                }*/
            }
        } catch (QQConnectException e) {
       
        } catch (Exception e) {
e.printStackTrace();
logger.error("qq登录或绑定出现异常出现异常!",e);
}
return redirecturl;
}
}

回调后的方法要看自己的具体的业务逻辑


页面代码

<a href="${ctx}/qqlogin/qqlogin.shtml"><li class="wx">QQ登录</li></a>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值