admin管理员组文章数量:1566356
首先 申请需要用到的 app_ID 和 app_KEY 具体步骤看这个 https://connect.qq/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>
版权声明:本文标题:springmvc web网站QQ第三方登录实现 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1725630448a1033686.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论