广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Springboot整合第三方登录功能的实现示例
  • 390
分享到

Springboot整合第三方登录功能的实现示例

2024-04-02 19:04:59 390人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

SpringBoot 项目的pom文件引入依赖 <dependency> <groupId>me.zhyd.oauth</groupId>

SpringBoot 项目的pom文件引入依赖

<dependency>
    <groupId>me.zhyd.oauth</groupId>
    <artifactId>JustAuth</artifactId>
    <version>{latest-version}</version>
</dependency>

代码

登录端点(controller)

 
import com.tarzan.cms.common.properties.SocialProperties;
import com.tarzan.cms.utils.SocialUtil;
import io.swagger.annotations.api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthCallback;
import me.zhyd.oauth.model.AuthToken;
import me.zhyd.oauth.request.AuthRequest;
import me.zhyd.oauth.utils.AuthStateUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.WEB.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import javax.servlet.Http.httpservletResponse;
import java.io.IOException;
 

 
@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());
    }
 
    
    @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;
            }
        }
    }
}

登录配置类

import com.google.common.collect.Maps;
import lombok.Data;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.config.AuthDefaultSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
 
import java.util.Map;
 
@Data
@ConfigurationProperties(prefix = "social")
public class SocialProperties {
    private Boolean enabled = false;
    private String domain;
    private Map<AuthDefaultSource, AuthConfig> oauth = Maps.newHashMap();
    private Map<String, String> alias = Maps.newHashMap();
}

application.yml配置 以gitee为例

social:
  enabled: true
  domain: http://127.0.0.1
  oauth:
    QQ:
      client-id: xxx
      client-secret: xxx
      redirect-uri: http://127.0.0.1:8443/oauth/gitee/callback
    WECHAT_OPEN:
      client-id: xxxxxx
      client-secret: xxxxxx
      redirect-uri: http://127.0.0.1:8443/oauth/baidu/callback
    GITEE:
      client-id: 5b693811f8229e38146f2c482e3f4e4dfbdf2b496d494698b6308d6f35dcb2e0
      client-secret: 428ff220b5aa5704c55a8cf91f13aa4466258a6e7c357c7e30a5bca1d1cbe4e2
      redirect-uri: http://127.0.0.1/auth/oauth/callback/GITEE
 

gitee开放平台创建应用配置

请求地址

http://127.0.0.1/auth/oauth/render/gitee

跳转gitee登录

 登录后,自动回调,获取用户信息

更多平台的集成教程请看

QQ登录 | JustAuth 

到此这篇关于Springboot整合第三方登录功能的实现示例的文章就介绍到这了,更多相关Springboot 第三方登录内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Springboot整合第三方登录功能的实现示例

本文链接: https://www.lsjlt.com/news/163526.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作