public void doLoginRedirect( @Param("code") String code, @Param("state") String state, Navigator nav, TurbineRunData rundata, Context context) { try { AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request); String accessToken = accessTokenObj.getAccessToken(); long tokenExpireIn = accessTokenObj.getExpireIn(); OpenID openIDObj = new OpenID(accessToken); String openID = openIDObj.getUserOpenID(); UserInfo qzoneUserInfo = new UserInfo(accessToken, openID); UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo(); UserDO userDO = new UserDO(); userDO.setNickName(userInfoBean.getNickname()); userDO.setFaceImageUrl(userInfoBean.getAvatar().getAvatarURL100()); userDO.setSourceType(SnsSourceType.TENXUN_QQ.getType()); userDO.setAccessToken(accessToken); userDO.setSourceId(openID); userDO.setStatus(MainStatus.NORMAL.getType()); userDO.setPermissions(PermissionsType.NORMAL.getType()); userAO.save(userDO); setCurrentLoginUser(userDO); } catch (QQConnectException e) { e.printStackTrace(); // To change body of catch statement use File | Settings | File // Templates. } }
/** * 获取第三方用户信息 * * @param siteMark * @param openId * @param accessToken * @return */ public static BindSite getBindSite(SiteMark siteMark, String openId, String accessToken) { BindSite bs = new BindSite(); bs.setSiteMark(siteMark); bs.setOpenId(openId); bs.setAccessToken(accessToken); String nickName = null; if (SiteMark.QQ.equals(siteMark)) { UserInfo ui = new UserInfo(accessToken, openId); UserInfoBean uib = null; try { uib = ui.getUserInfo(); } catch (QQConnectException e) { logger.error(e); throw new ServiceException(ErrService.UserS.ACC_108, "QQ_API调用异常", "第三方平台异常,请从新尝试!"); } nickName = uib.getNickname(); } else if (SiteMark.SINA.equals(siteMark)) { Users um = new Users(); um.client.setToken(accessToken); try { weibo4j.model.User user = um.showUserById(openId); nickName = user.getScreenName(); } catch (WeiboException e) { logger.error(e); throw new ServiceException(ErrService.UserS.ACC_108, "SINA_API调用异常", "第三方平台异常,请从新尝试!"); } } bs.setNickName(nickName); return bs; }
/** * qq登录回调方法 * * @throws QQConnectException */ public void qqlogincallback() throws QQConnectException, IOException { HttpServletRequest request = getRequest(); AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request); String accessToken = null, openID = null; if (accessTokenObj.getAccessToken().equals("")) { renderText("用户取消了授权或没有获取到响应参数"); } else { accessToken = accessTokenObj.getAccessToken(); // 利用获取到的accessToken 去获取当前用的openid -------- start OpenID openIDObj = new OpenID(accessToken); openID = openIDObj.getUserOpenID(); UserInfo qzoneUserInfo = new UserInfo(accessToken, openID); UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo(); String avatar = userInfoBean.getAvatar().getAvatarURL50(); String nickname = userInfoBean.getNickname(); User user = (User) getSession().getAttribute(Constants.USER_SESSION); if (user == null) { user = User.me.findByOpenID(openID, "qq"); String id = StrUtil.getUUID(); if (user == null) { user = new User(); user.set("id", id) .set("qq_nickname", nickname) .set("qq_avatar", avatar) .set("qq_open_id", openID); } else { user.set("qq_nickname", nickname).set("qq_avatar", avatar); } setSessionAttr("open_id", openID); setSessionAttr("thirdlogin_type", "qq"); setSessionAttr("unsave_user", user); } else { User user1 = User.me.findByOpenID(openID, "qq"); if (user1 != null && !user1.get("id").equals(user.get("id"))) { getResponse().setCharacterEncoding("utf-8"); getResponse() .getWriter() .write( "<script>alert('此QQ号已经绑定其他账户,请更换绑定');location.href=\'/user/setting\'</script>"); return; } else { user.set("qq_nickname", nickname) .set("qq_open_id", openID) .set("qq_avatar", avatar) .update(); } } if (StrUtil.isBlank(user.getStr("email"))) { redirect("/reg.html?third=qq"); } else { setSessionAttr(Constants.USER_SESSION, user); setCookie( Constants.USER_COOKIE, StrUtil.getEncryptionToken(user.getStr("token")), 30 * 24 * 60 * 60); String source = (String) getSession().getAttribute("source"); if (!StrUtil.isBlank(source)) { if (source.equalsIgnoreCase("usersetting")) { getSession().removeAttribute("source"); redirect("/user/setting"); } } else { redirect("/"); } } } }