diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/pom.xml b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/pom.xml index c68c4e9..7706118 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/pom.xml +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/pom.xml @@ -65,5 +65,11 @@ schisandra-cloud-storage-auth-api 1.0-SNAPSHOT + + com.xkcoding + justauth-spring-boot-starter + 1.1.0 + compile + diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraOauthController.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraOauthController.java new file mode 100644 index 0000000..df9a4cc --- /dev/null +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraOauthController.java @@ -0,0 +1,92 @@ +package com.schisandra.auth.application.controller; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.xkcoding.justauth.AuthRequestFactory; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.request.AuthRequest; +import me.zhyd.oauth.utils.AuthStateUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +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; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * ClassName:SchisandraOauthController + * Package:com.schisandra.auth.application.controller + * Description:实现justauth第三方登录 + * + * @Author:fanyang + * @Create:2024/5/9 - 21:30 + * @Version: v1.0 + */ + +@Slf4j +@RestController +@RequestMapping("/oauth") +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class SchisandraOauthController { + + private final AuthRequestFactory factory; + + /** + * 登录类型 + */ + @GetMapping + public Map loginType() { + List oauthList = factory.oauthList(); + return oauthList.stream().collect(Collectors + .toMap(oauth -> oauth.toLowerCase() + "登录", + oauth -> "http://127.0.0.1:3000/oauth/login/" + oauth.toLowerCase())); + } + + /** + * 登录 + * + * @param oauthType 第三方登录类型 + * @param response response + * @throws IOException + */ + @RequestMapping("/login/{oauthType}") + public void renderAuth(@PathVariable String oauthType, HttpServletResponse response) + throws IOException { + AuthRequest authRequest = factory.get(getAuthSource(oauthType)); + response.sendRedirect(authRequest.authorize(oauthType + "::" + AuthStateUtils.createState())); + } + + /** + * 登录成功后的回调 + * + * @param oauthType 第三方登录类型 + * @param callback 携带返回的信息 + * @return 登录成功后的信息 + */ + @RequestMapping("/{oauthType}/callback") + public AuthResponse login(@PathVariable String oauthType, AuthCallback callback) { + AuthRequest authRequest = factory.get(getAuthSource(oauthType)); + AuthResponse response = authRequest.login(callback); + log.info("【response】= {}", JSONUtil.toJsonStr(response)); + return response; + } + + private AuthSource getAuthSource(String type) { + if (StrUtil.isNotBlank(type)) { + return AuthSource.valueOf(type.toUpperCase()); + } else { + throw new RuntimeException("不支持的类型"); + } + } + +} + diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/pom.xml b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/pom.xml index 86846ad..4bfd23b 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/pom.xml +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/pom.xml @@ -100,5 +100,33 @@ sms4j-Email-core 3.2.1 + + + + com.xkcoding + justauth-spring-boot-starter + 1.1.0 + + + + + org.projectlombok + lombok + true + + + + + cn.hutool + hutool-all + 5.3.8 + + + + + com.google.guava + guava + 29.0-jre + diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-starter/src/main/resources/application.yml b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-starter/src/main/resources/application.yml index 6ec5c39..735574d 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-starter/src/main/resources/application.yml +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-starter/src/main/resources/application.yml @@ -103,4 +103,15 @@ sa-token: # #您的sdkAppId # sdk-app-id: 您的sdkAppId +justauth: + enabled: true + type: + gitee: + client-id: 31b0e97dbf04c99ef1850d9ba50966a0fcd5cf84ee976d838b4894c2248dbce9 + client-secret: bae8d25c7ef11b3a4b409a5069d029a20eb393e3179d13b38ab20ee376a21127 + redirect-uri: http://127.0.0.1:3000/oauth/gitee/callback + cache: + type: redis + prefix: 'SOCIAL::STATE::' + timeout: 1h