Java第三方登录封装工具类

Java中可以使用第三方登录来简化用户登录流程,常见的第三方登录如QQ、微信、微博等。下面是一个Java封装第三方登录的工具类:

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.http.client.ClientProtocolException;

import com.alibaba.fastjson.JSONObject;
import com.qq.connect.QQConnectException;
import com.qq.connect.oauth.Oauth;
import com.qq.connect.utils.HttpClientUtils;
import com.qq.connect.utils.QQConnectConfig;
import com.qq.connect.utils.RandomStatusGenerator;

public class ThirdPartyLoginUtil {
    
    // QQ登录回调地址,需与QQ应用中的回调地址一致
    private static final String CALLBACK_URL = "http://localhost:8080/qq/callback";
    
    /**
     * 获取QQ授权页面地址
     * @param state 随机数,用于防止CSRF攻击
     * @return 授权页面地址
     * @throws QQConnectException
     */
    public static String getQQAuthorizeURL(String state) throws QQConnectException {
        return new Oauth().getAuthorizeURL(CALLBACK_URL, state, "", "");
    }

    /**
     * 获取QQ用户信息
     * @param accessToken 访问令牌
     * @param openId 用户在QQ空间的唯一标识符
     * @return 用户信息Map集合
     * @throws QQConnectException
     * @throws ClientProtocolException
     * @throws IOException
     */
    public static Map<String, Object> getQQUserInfo(String accessToken, String openId) 
            throws QQConnectException, ClientProtocolException, IOException {
        String url = QQConnectConfig.getValue("getUserInfoURL") + "?access_token=" + accessToken 
                + "&oauth_consumer_key=" + QQConnectConfig.getValue("app_ID") 
                + "&openid=" + openId;
        String response = HttpClientUtils.get(url);
        JSONObject jsonObject = JSONObject.parseObject(response);
        Map<String, Object> userInfo = new HashMap<String, Object>();
        userInfo.put("nickname", jsonObject.getString("nickname"));
        userInfo.put("gender", jsonObject.getString("gender"));
        userInfo.put("figureurl", jsonObject.getString("figureurl_qq_2"));
        return userInfo;
    }
    
    /**
     * 生成随机数,用于防止CSRF攻击
     * @return 随机数
     */
    public static String generateState() {
        return RandomStatusGenerator.getUniqueState();
    }

}

以上代码基于QQ登录进行封装,其他第三方登录可根据需求进行修改。使用时,可以先在配置文件中设置QQ应用的App ID和App Key:

app_ID=your_app_id
app_Key=your_app_key
getUserInfoURL=https://graph.qq.com/user/get_user_info

然后在登录页面中生成随机数和授权链接:

<a href="<%=ThirdPartyLoginUtil.getQQAuthorizeURL(ThirdPartyLoginUtil.generateState())%>">QQ登录</a>

在回调页面中获取访问令牌和用户信息(需验证state参数):

String stateInSession = (String) request.getSession().getAttribute("state");
String state = request.getParameter("state");
if (!state.equals(stateInSession)) {
    // 非法访问
}
String code = request.getParameter("code");
AccessToken accessTokenObj = new Oauth().getAccessTokenByCode(code, ThirdPartyLoginUtil.CALLBACK_URL);
String accessToken = accessTokenObj.getAccessToken();
String openId = new OpenID(accessToken).getUserOpenID();
Map<String, Object> userInfo = ThirdPartyLoginUtil.getQQUserInfo(accessToken, openId);

获取到用户信息后,可以进行登录操作或跳转到注册页面进行账号绑定。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值