Springboot整合第三方登录功能

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

/**

  • 第三方登陆端点

  • @author tarzan

*/

@Slf4j

@RestController

@AllArgsConstructor

@RequestMapping(“auth”)

@ConditionalOnProperty(value = “social.enabled”, havingValue = “true”)

@Api(value = “第三方登陆”, tags = “第三方登陆端点”)

public class BladeSocialEndpoint {

private final SocialProperties socialProperties;

/**

  • 授权完毕跳转

*/

@ApiOperation(value = “授权完毕跳转(RequestMapping)”)

@RequestMapping(“/oauth/render/{source}”)

public void renderAuth(@PathVariable(“source”) String source, HttpServletResponse response) throws IOException {

AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);

String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());

response.sendRedirect(authorizeUrl);

}

/**

  • 获取认证信息

*/

@ApiOperation(value = “获取认证信息(RequestMapping)”)

@RequestMapping(“/oauth/callback/{source}”)

public Object login(@PathVariable(“source”) String source, AuthCallback callback) {

AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);

return authRequest.login(callback);

}

/**

  • 撤销授权

*/

@ApiOperation(value = “撤销授权(RequestMapping)”)

@RequestMapping(“/oauth/revoke/{source}/{token}”)

public Object revokeAuth(@PathVariable(“source”) String source, @PathVariable(“token”) String token) {

AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);

return authRequest.revoke(AuthToken.builder().accessToken(token).build());

}

/**

  • 续期accessToken

*/

@ApiOperation(value = “续期令牌(RequestMapping)”)

@RequestMapping(“/oauth/refresh/{source}”)

public Object refreshAuth(@PathVariable(“source”) String source, String token) {

AuthRequest authRequest = SocialUtil.getAuthRequest(source, socialProperties);

return authRequest.refresh(AuthToken.builder().refreshToken(token).build());

}

}

工具类代码

import com.tarzan.cms.common.properties.SocialProperties;

import me.zhyd.oauth.config.AuthConfig;

import me.zhyd.oauth.config.AuthDefaultSource;

import me.zhyd.oauth.exception.AuthException;

import me.zhyd.oauth.request.*;

import java.util.Objects;

public class SocialUtil {

public SocialUtil() {

}

public static AuthRequest getAuthRequest(String source, SocialProperties socialProperties) {

AuthDefaultSource authSource = (AuthDefaultSource)Objects.requireNonNull(AuthDefaultSource.valueOf(source.toUpperCase()));

AuthConfig authConfig = (AuthConfig)socialProperties.getOauth().get(authSource);

if (authConfig == null) {

throw new AuthException(“未获取到有效的Auth配置”);

} else {

AuthRequest authRequest = null;

switch(authSource) {

case GITHUB:

authRequest = new AuthGithubRequest(authConfig);

break;

case GITEE:

authRequest = new AuthGiteeRequest(authConfig);

break;

case OSCHINA:

authRequest = new AuthOschinaRequest(authConfig);

break;

case QQ:

authRequest = new AuthQqRequest(authConfig);

break;

case WECHAT_OPEN:

authRequest = new AuthWeChatOpenRequest(authConfig);

break;

case WECHAT_ENTERPRISE:

authRequest = new AuthWeChatEnterpriseRequest(authConfig);

break;

case WECHAT_MP:

authRequest = new AuthWeChatMpRequest(authConfig);

break;

case DINGTALK:

authRequest = new AuthDingTalkRequest(authConfig);

break;

case ALIPAY:

authRequest = new AuthAlipayRequest(authConfig);

break;

case BAIDU:

authRequest = new AuthBaiduRequest(authConfig);

break;

case WEIBO:

authRequest = new AuthWeiboRequest(authConfig);

break;

case CODING:

authRequest = new AuthCodingRequest(authConfig);

break;

case CSDN:

authRequest = new AuthCsdnRequest(authConfig);

break;

case TAOBAO:

authRequest = new AuthTaobaoRequest(authConfig);

break;

case GOOGLE:

authRequest = new AuthGoogleRequest(authConfig);

break;

case FACEBOOK:

authRequest = new AuthFacebookRequest(authConfig);

break;

case DOUYIN:

authRequest = new AuthDouyinRequest(authConfig);

break;

case LINKEDIN:

authRequest = new AuthLinkedinRequest(authConfig);

break;

case MICROSOFT:

authRequest = new AuthMicrosoftRequest(authConfig);

break;

case MI:

authRequest = new AuthMiRequest(authConfig);

break;

case TOUTIAO:

authRequest = new AuthToutiaoRequest(authConfig);

break;

case TEAMBITION:

authRequest = new AuthTeambitionRequest(authConfig);

break;

case PINTEREST:

authRequest = new AuthPinterestRequest(authConfig);

break;

case RENREN:

authRequest = new AuthRenrenRequest(authConfig);

break;

case STACK_OVERFLOW:

authRequest = new AuthStackOverflowRequest(authConfig);

break;

case HUAWEI:

authRequest = new AuthHuaweiRequest(authConfig);

break;

case KUJIALE:

authRequest = new AuthKujialeRequest(authConfig);

break;

case GITLAB:

authRequest = new AuthGitlabRequest(authConfig);

break;

case MEITUAN:

authRequest = new AuthMeituanRequest(authConfig);

break;

case ELEME:

authRequest = new AuthElemeRequest(authConfig);

break;

case TWITTER:

authRequest = new AuthTwitterRequest(authConfig);

}

if (null == authRequest) {

throw new AuthException(“未获取到有效的Auth配置”);

} else {

return (AuthRequest)authRequest;

}

}

}

}

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
外链图片转存中…(img-4hUMU0wL-1715075976577)]

[外链图片转存中…(img-tBUwoWlf-1715075976578)]

[外链图片转存中…(img-s1u1sh1x-1715075976578)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值