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登录功能就完成了。