Commit ee25b8aedbe25289a1dad53763fd33e954eef06a

Authored by 芋道源码
Committed by Gitee
2 parents f2ff30e4 0bf24c6d

!752 使用 justauth 替代现有 yudao-spring-boot-starter-biz-social 依赖,减少 starter

Merge pull request !752 from 芋道源码/feature/justauth-op
yudao-dependencies/pom.xml
@@ -70,7 +70,7 @@ @@ -70,7 +70,7 @@
70 <aliyun-java-sdk-core.version>4.6.4</aliyun-java-sdk-core.version> 70 <aliyun-java-sdk-core.version>4.6.4</aliyun-java-sdk-core.version>
71 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version> 71 <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
72 <tencentcloud-sdk-java.version>3.1.880</tencentcloud-sdk-java.version> 72 <tencentcloud-sdk-java.version>3.1.880</tencentcloud-sdk-java.version>
73 - <justauth.version>1.0.7</justauth.version> 73 + <justauth.version>1.0.8</justauth.version>
74 <jimureport.version>1.6.1</jimureport.version> 74 <jimureport.version>1.6.1</jimureport.version>
75 <xercesImpl.version>2.12.2</xercesImpl.version> 75 <xercesImpl.version>2.12.2</xercesImpl.version>
76 <weixin-java.version>4.5.0</weixin-java.version> 76 <weixin-java.version>4.5.0</weixin-java.version>
@@ -611,6 +611,12 @@ @@ -611,6 +611,12 @@
611 <groupId>com.xingyuv</groupId> 611 <groupId>com.xingyuv</groupId>
612 <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) --> 612 <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) -->
613 <version>${justauth.version}</version> 613 <version>${justauth.version}</version>
  614 + <exclusions>
  615 + <exclusion>
  616 + <groupId>cn.hutool</groupId>
  617 + <artifactId>hutool-core</artifactId>
  618 + </exclusion>
  619 + </exclusions>
614 </dependency> 620 </dependency>
615 621
616 <dependency> 622 <dependency>
yudao-framework/pom.xml
@@ -32,7 +32,6 @@ @@ -32,7 +32,6 @@
32 32
33 <module>yudao-spring-boot-starter-biz-pay</module> 33 <module>yudao-spring-boot-starter-biz-pay</module>
34 <module>yudao-spring-boot-starter-biz-weixin</module> 34 <module>yudao-spring-boot-starter-biz-weixin</module>
35 - <module>yudao-spring-boot-starter-biz-social</module>  
36 <module>yudao-spring-boot-starter-biz-tenant</module> 35 <module>yudao-spring-boot-starter-biz-tenant</module>
37 <module>yudao-spring-boot-starter-biz-data-permission</module> 36 <module>yudao-spring-boot-starter-biz-data-permission</module>
38 <module>yudao-spring-boot-starter-biz-error-code</module> 37 <module>yudao-spring-boot-starter-biz-error-code</module>
yudao-framework/yudao-spring-boot-starter-biz-social/pom.xml deleted
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<project xmlns="http://maven.apache.org/POM/4.0.0"  
3 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
4 - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
5 - <parent>  
6 - <groupId>cn.iocoder.boot</groupId>  
7 - <artifactId>yudao-framework</artifactId>  
8 - <version>${revision}</version>  
9 - </parent>  
10 - <packaging>jar</packaging>  
11 - <modelVersion>4.0.0</modelVersion>  
12 -  
13 - <artifactId>yudao-spring-boot-starter-biz-social</artifactId>  
14 - <name>${project.artifactId}</name>  
15 -  
16 - <dependencies>  
17 - <dependency>  
18 - <groupId>cn.iocoder.boot</groupId>  
19 - <artifactId>yudao-common</artifactId>  
20 - </dependency>  
21 - <!-- Spring 核心 -->  
22 - <dependency>  
23 - <groupId>org.springframework.boot</groupId>  
24 - <artifactId>spring-boot-starter-aop</artifactId>  
25 - </dependency>  
26 - <!-- Web 相关 -->  
27 - <dependency>  
28 - <groupId>cn.iocoder.boot</groupId>  
29 - <artifactId>yudao-spring-boot-starter-web</artifactId>  
30 - </dependency>  
31 - <!-- spring boot 配置所需依赖 -->  
32 - <dependency>  
33 - <groupId>org.springframework.boot</groupId>  
34 - <artifactId>spring-boot-configuration-processor</artifactId>  
35 - <optional>true</optional>  
36 - </dependency>  
37 - <!-- 三方云服务相关 -->  
38 - <dependency>  
39 - <groupId>com.xingyuv</groupId>  
40 - <artifactId>spring-boot-starter-justauth</artifactId>  
41 - <exclusions>  
42 - <exclusion>  
43 - <groupId>cn.hutool</groupId>  
44 - <artifactId>hutool-core</artifactId>  
45 - </exclusion>  
46 - </exclusions>  
47 - </dependency>  
48 - <dependency>  
49 - <groupId>cn.iocoder.boot</groupId>  
50 - <artifactId>yudao-spring-boot-starter-redis</artifactId>  
51 - </dependency>  
52 -  
53 - </dependencies>  
54 -  
55 -  
56 -</project>  
57 \ No newline at end of file 0 \ No newline at end of file
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java deleted
1 -package cn.iocoder.yudao.framework.social.config;  
2 -  
3 -import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;  
4 -import com.xingyuv.http.HttpUtil;  
5 -import com.xingyuv.http.support.hutool.HutoolImpl;  
6 -import com.xingyuv.jushauth.cache.AuthStateCache;  
7 -import com.xingyuv.justauth.autoconfigure.JustAuthProperties;  
8 -import lombok.extern.slf4j.Slf4j;  
9 -import org.springframework.boot.autoconfigure.AutoConfiguration;  
10 -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;  
11 -import org.springframework.boot.context.properties.EnableConfigurationProperties;  
12 -import org.springframework.context.annotation.Bean;  
13 -import org.springframework.context.annotation.Primary;  
14 -  
15 -/**  
16 - * 社交自动装配类  
17 - *  
18 - * @author timfruit  
19 - * @date 2021-10-30  
20 - */  
21 -@Slf4j  
22 -@AutoConfiguration  
23 -@EnableConfigurationProperties(JustAuthProperties.class)  
24 -public class YudaoSocialAutoConfiguration {  
25 -  
26 - @Bean  
27 - @Primary  
28 - @ConditionalOnProperty(prefix = "justauth", value = "enabled", havingValue = "true", matchIfMissing = true)  
29 - public YudaoAuthRequestFactory yudaoAuthRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) {  
30 - // 需要修改 HttpUtil 使用的实现,避免类报错  
31 - HttpUtil.setHttp(new HutoolImpl());  
32 - // 创建 YudaoAuthRequestFactory  
33 - return new YudaoAuthRequestFactory(properties, authStateCache);  
34 - }  
35 -  
36 -}  
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/YudaoAuthRequestFactory.java deleted
1 -package cn.iocoder.yudao.framework.social.core;  
2 -  
3 -import cn.hutool.core.util.EnumUtil;  
4 -import cn.hutool.core.util.ReflectUtil;  
5 -import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;  
6 -import cn.iocoder.yudao.framework.social.core.request.AuthWeChatMiniAppRequest;  
7 -import cn.iocoder.yudao.framework.social.core.request.AuthWeChatMpRequest;  
8 -import com.xingyuv.jushauth.cache.AuthStateCache;  
9 -import com.xingyuv.jushauth.config.AuthConfig;  
10 -import com.xingyuv.jushauth.config.AuthSource;  
11 -import com.xingyuv.jushauth.request.AuthRequest;  
12 -import com.xingyuv.justauth.AuthRequestFactory;  
13 -import com.xingyuv.justauth.autoconfigure.JustAuthProperties;  
14 -  
15 -import java.lang.reflect.Method;  
16 -  
17 -import static com.xingyuv.jushauth.config.AuthDefaultSource.WECHAT_MP;  
18 -  
19 -/**  
20 - * 第三方授权拓展 request 工厂类  
21 - * 为使得拓展配置 {@link AuthConfig} 和默认配置齐平,所以自定义本工厂类  
22 - *  
23 - * @author timfruit  
24 - * @date 2021-10-31  
25 - */  
26 -public class YudaoAuthRequestFactory extends AuthRequestFactory {  
27 -  
28 - protected JustAuthProperties properties;  
29 - protected AuthStateCache authStateCache;  
30 -  
31 - /**  
32 - * 由于父类 configureHttpConfig 方法是 private 修饰,所以获取后,进行反射调用  
33 - */  
34 - private final Method configureHttpConfigMethod = ReflectUtil.getMethod(AuthRequestFactory.class,  
35 - "configureHttpConfig", String.class, AuthConfig.class, JustAuthProperties.JustAuthHttpConfig.class);  
36 -  
37 - public YudaoAuthRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) {  
38 - super(properties, authStateCache);  
39 - this.properties = properties;  
40 - this.authStateCache = authStateCache;  
41 - }  
42 -  
43 - /**  
44 - * 返回 AuthRequest 对象  
45 - *  
46 - * @param source {@link AuthSource}  
47 - * @return {@link AuthRequest}  
48 - */  
49 - @Override  
50 - public AuthRequest get(String source) {  
51 - // 先尝试获取自定义扩展的  
52 - AuthRequest authRequest = getExtendRequest(source);  
53 - // 找不到,使用默认拓展  
54 - if (authRequest == null) {  
55 - authRequest = super.get(source);  
56 - }  
57 - return authRequest;  
58 - }  
59 -  
60 - protected AuthRequest getExtendRequest(String source) {  
61 - // TODO 芋艿:临时兼容 justauth 迁移的类型不对问题;  
62 - if (WECHAT_MP.name().equalsIgnoreCase(source)) {  
63 - AuthConfig config = properties.getType().get(WECHAT_MP.name());  
64 - return new AuthWeChatMpRequest(config, authStateCache);  
65 - }  
66 -  
67 - AuthExtendSource authExtendSource;  
68 - try {  
69 - authExtendSource = EnumUtil.fromString(AuthExtendSource.class, source.toUpperCase());  
70 - } catch (IllegalArgumentException e) {  
71 - // 无自定义匹配  
72 - return null;  
73 - }  
74 -  
75 - // 拓展配置和默认配置齐平,properties 放在一起  
76 - AuthConfig config = properties.getType().get(authExtendSource.name());  
77 - // 找不到对应关系,直接返回空  
78 - if (config == null) {  
79 - return null;  
80 - }  
81 - // 反射调用,配置 http config  
82 - ReflectUtil.invoke(this, configureHttpConfigMethod, authExtendSource.name(), config, properties.getHttpConfig());  
83 -  
84 - // 获得拓展的 Request  
85 - // noinspection SwitchStatementWithTooFewBranches  
86 - switch (authExtendSource) {  
87 - case WECHAT_MINI_APP:  
88 - return new AuthWeChatMiniAppRequest(config, authStateCache);  
89 - default:  
90 - return null;  
91 - }  
92 - }  
93 -  
94 -}  
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/enums/AuthExtendSource.java deleted
1 -package cn.iocoder.yudao.framework.social.core.enums;  
2 -  
3 -import com.xingyuv.jushauth.config.AuthSource;  
4 -import com.xingyuv.jushauth.request.AuthDefaultRequest;  
5 -  
6 -/**  
7 - * 拓展 JustAuth 各 api 需要的 url, 用枚举类分平台类型管理  
8 - *  
9 - * 默认配置 {@link com.xingyuv.jushauth.config.AuthDefaultSource}  
10 - *  
11 - * @author timfruit  
12 - */  
13 -public enum AuthExtendSource implements AuthSource {  
14 -  
15 - /**  
16 - * 微信小程序授权登录  
17 - */  
18 - WECHAT_MINI_APP {  
19 -  
20 - @Override  
21 - public String authorize() {  
22 - // 参见 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 文档  
23 - throw new UnsupportedOperationException("不支持获取授权 url,请使用小程序内置函数 wx.login() 登录获取 code");  
24 - }  
25 -  
26 - @Override  
27 - public String accessToken() {  
28 - // 参见 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html 文档  
29 - // 获取 openid, unionId , session_key 等字段  
30 - return "https://api.weixin.qq.com/sns/jscode2session";  
31 - }  
32 -  
33 - @Override  
34 - public String userInfo() {  
35 - // 参见 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html 文档  
36 - throw new UnsupportedOperationException("不支持获取用户信息 url,请使用小程序内置函数 wx.getUserProfile() 获取用户信息");  
37 - }  
38 -  
39 - @Override  
40 - public Class<? extends AuthDefaultRequest> getTargetClass() {  
41 - return null;  
42 - }  
43 - }  
44 -  
45 -}  
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMiniAppRequest.java deleted
1 -package cn.iocoder.yudao.framework.social.core.request;  
2 -  
3 -import cn.iocoder.yudao.framework.common.util.json.JsonUtils;  
4 -import cn.iocoder.yudao.framework.social.core.enums.AuthExtendSource;  
5 -import com.fasterxml.jackson.annotation.JsonProperty;  
6 -import com.xingyuv.jushauth.cache.AuthStateCache;  
7 -import com.xingyuv.jushauth.config.AuthConfig;  
8 -import com.xingyuv.jushauth.exception.AuthException;  
9 -import com.xingyuv.jushauth.model.AuthCallback;  
10 -import com.xingyuv.jushauth.model.AuthToken;  
11 -import com.xingyuv.jushauth.model.AuthUser;  
12 -import com.xingyuv.jushauth.request.AuthDefaultRequest;  
13 -import com.xingyuv.jushauth.utils.HttpUtils;  
14 -import com.xingyuv.jushauth.utils.UrlBuilder;  
15 -import lombok.Data;  
16 -  
17 -/**  
18 - * 微信小程序登陆 Request 请求  
19 - *  
20 - * 由于 JustAuth 定位是面向 Web 为主的三方登录,所以微信小程序只能自己封装  
21 - *  
22 - * @author timfruit  
23 - * @date 2021-10-29  
24 - */  
25 -public class AuthWeChatMiniAppRequest extends AuthDefaultRequest {  
26 -  
27 - public AuthWeChatMiniAppRequest(AuthConfig config, AuthStateCache authStateCache) {  
28 - super(config, AuthExtendSource.WECHAT_MINI_APP, authStateCache);  
29 - }  
30 -  
31 - @Override  
32 - protected AuthToken getAccessToken(AuthCallback authCallback) {  
33 - // 参见 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html 文档  
34 - // 使用 code 获取对应的 openId、unionId 等字段  
35 - String response = new HttpUtils(config.getHttpConfig()).get(accessTokenUrl(authCallback.getCode())).getBody();  
36 - JSCode2SessionResponse accessTokenObject = JsonUtils.parseObject(response, JSCode2SessionResponse.class);  
37 - assert accessTokenObject != null;  
38 - checkResponse(accessTokenObject);  
39 - // 拼装结果  
40 - return AuthToken.builder()  
41 - .openId(accessTokenObject.getOpenid())  
42 - .unionId(accessTokenObject.getUnionId())  
43 - .build();  
44 - }  
45 -  
46 - @Override  
47 - protected AuthUser getUserInfo(AuthToken authToken) {  
48 - // 参见 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html 文档  
49 - // 如果需要用户信息,需要在小程序调用函数后传给后端  
50 - return AuthUser.builder()  
51 - .username("")  
52 - .nickname("")  
53 - .avatar("")  
54 - .uuid(authToken.getOpenId())  
55 - .token(authToken)  
56 - .source(source.toString())  
57 - .build();  
58 - }  
59 -  
60 - /**  
61 - * 检查响应内容是否正确  
62 - *  
63 - * @param response 请求响应内容  
64 - */  
65 - private void checkResponse(JSCode2SessionResponse response) {  
66 - if (response.getErrorCode() != 0) {  
67 - throw new AuthException(response.getErrorCode(), response.getErrorMsg());  
68 - }  
69 - }  
70 -  
71 - @Override  
72 - protected String accessTokenUrl(String code) {  
73 - return UrlBuilder.fromBaseUrl(source.accessToken())  
74 - .queryParam("appid", config.getClientId())  
75 - .queryParam("secret", config.getClientSecret())  
76 - .queryParam("js_code", code)  
77 - .queryParam("grant_type", "authorization_code")  
78 - .build();  
79 - }  
80 -  
81 - @Data  
82 - @SuppressWarnings("SpellCheckingInspection")  
83 - private static class JSCode2SessionResponse {  
84 -  
85 - @JsonProperty("errcode")  
86 - private int errorCode;  
87 - @JsonProperty("errmsg")  
88 - private String errorMsg;  
89 - @JsonProperty("session_key")  
90 - private String sessionKey;  
91 - private String openid;  
92 - @JsonProperty("unionid")  
93 - private String unionId;  
94 -  
95 - }  
96 -  
97 -}  
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/core/request/AuthWeChatMpRequest.java deleted
1 -package cn.iocoder.yudao.framework.social.core.request;  
2 -  
3 -import com.alibaba.fastjson.JSONObject;  
4 -import com.xingyuv.jushauth.cache.AuthStateCache;  
5 -import com.xingyuv.jushauth.config.AuthConfig;  
6 -import com.xingyuv.jushauth.config.AuthDefaultSource;  
7 -import com.xingyuv.jushauth.enums.AuthResponseStatus;  
8 -import com.xingyuv.jushauth.enums.AuthUserGender;  
9 -import com.xingyuv.jushauth.enums.scope.AuthWechatMpScope;  
10 -import com.xingyuv.jushauth.exception.AuthException;  
11 -import com.xingyuv.jushauth.model.AuthCallback;  
12 -import com.xingyuv.jushauth.model.AuthResponse;  
13 -import com.xingyuv.jushauth.model.AuthToken;  
14 -import com.xingyuv.jushauth.model.AuthUser;  
15 -import com.xingyuv.jushauth.request.AuthDefaultRequest;  
16 -import com.xingyuv.jushauth.utils.AuthScopeUtils;  
17 -import com.xingyuv.jushauth.utils.GlobalAuthUtils;  
18 -import com.xingyuv.jushauth.utils.HttpUtils;  
19 -import com.xingyuv.jushauth.utils.UrlBuilder;  
20 -  
21 -/**  
22 - * 微信公众平台登录  
23 - *  
24 - * @author yangkai.shen (https://xkcoding.com)  
25 - * @since 1.1.0  
26 - */  
27 -public class AuthWeChatMpRequest extends AuthDefaultRequest {  
28 - public AuthWeChatMpRequest(AuthConfig config) {  
29 - super(config, AuthDefaultSource.WECHAT_MP);  
30 - }  
31 -  
32 - public AuthWeChatMpRequest(AuthConfig config, AuthStateCache authStateCache) {  
33 - super(config, AuthDefaultSource.WECHAT_MP, authStateCache);  
34 - }  
35 -  
36 - /**  
37 - * 微信的特殊性,此时返回的信息同时包含 openid 和 access_token  
38 - *  
39 - * @param authCallback 回调返回的参数  
40 - * @return 所有信息  
41 - */  
42 - @Override  
43 - protected AuthToken getAccessToken(AuthCallback authCallback) {  
44 - return this.getToken(accessTokenUrl(authCallback.getCode()));  
45 - }  
46 -  
47 - @Override  
48 - protected AuthUser getUserInfo(AuthToken authToken) {  
49 - String openId = authToken.getOpenId();  
50 -  
51 - String response = doGetUserInfo(authToken);  
52 - JSONObject object = JSONObject.parseObject(response);  
53 -  
54 - this.checkResponse(object);  
55 -  
56 - String location = String.format("%s-%s-%s", object.getString("country"), object.getString("province"), object.getString("city"));  
57 -  
58 - if (object.containsKey("unionid")) {  
59 - authToken.setUnionId(object.getString("unionid"));  
60 - }  
61 -  
62 - return AuthUser.builder()  
63 - .rawUserInfo(object)  
64 - .username(object.getString("nickname"))  
65 - .nickname(object.getString("nickname"))  
66 - .avatar(object.getString("headimgurl"))  
67 - .location(location)  
68 - .uuid(openId)  
69 - .gender(AuthUserGender.getWechatRealGender(object.getString("sex")))  
70 - .token(authToken)  
71 - .source(source.toString())  
72 - .build();  
73 - }  
74 -  
75 - @Override  
76 - public AuthResponse refresh(AuthToken oldToken) {  
77 - return AuthResponse.builder()  
78 - .code(AuthResponseStatus.SUCCESS.getCode())  
79 - .data(this.getToken(refreshTokenUrl(oldToken.getRefreshToken())))  
80 - .build();  
81 - }  
82 -  
83 - /**  
84 - * 检查响应内容是否正确  
85 - *  
86 - * @param object 请求响应内容  
87 - */  
88 - private void checkResponse(JSONObject object) {  
89 - if (object.containsKey("errcode")) {  
90 - throw new AuthException(object.getIntValue("errcode"), object.getString("errmsg"));  
91 - }  
92 - }  
93 -  
94 - /**  
95 - * 获取token,适用于获取access_token和刷新token  
96 - *  
97 - * @param accessTokenUrl 实际请求token的地址  
98 - * @return token对象  
99 - */  
100 - private AuthToken getToken(String accessTokenUrl) {  
101 - String response = new HttpUtils(config.getHttpConfig()).get(accessTokenUrl).getBody();  
102 - JSONObject accessTokenObject = JSONObject.parseObject(response);  
103 -  
104 - this.checkResponse(accessTokenObject);  
105 -  
106 - return AuthToken.builder()  
107 - .accessToken(accessTokenObject.getString("access_token"))  
108 - .refreshToken(accessTokenObject.getString("refresh_token"))  
109 - .expireIn(accessTokenObject.getIntValue("expires_in"))  
110 - .openId(accessTokenObject.getString("openid"))  
111 - .scope(accessTokenObject.getString("scope"))  
112 - .build();  
113 - }  
114 -  
115 - /**  
116 - * 返回带{@code state}参数的授权url,授权回调时会带上这个{@code state}  
117 - *  
118 - * @param state state 验证授权流程的参数,可以防止csrf  
119 - * @return 返回授权地址  
120 - * @since 1.9.3  
121 - */  
122 - @Override  
123 - public String authorize(String state) {  
124 - return UrlBuilder.fromBaseUrl(source.authorize())  
125 - .queryParam("appid", config.getClientId())  
126 - .queryParam("redirect_uri", GlobalAuthUtils.urlEncode(config.getRedirectUri()))  
127 - .queryParam("response_type", "code")  
128 - .queryParam("scope", this.getScopes(",", false, AuthScopeUtils.getDefaultScopes(AuthWechatMpScope.values())))  
129 - .queryParam("state", getRealState(state).concat("#wechat_redirect"))  
130 - .build();  
131 - }  
132 -  
133 - /**  
134 - * 返回获取accessToken的url  
135 - *  
136 - * @param code 授权码  
137 - * @return 返回获取accessToken的url  
138 - */  
139 - @Override  
140 - protected String accessTokenUrl(String code) {  
141 - return UrlBuilder.fromBaseUrl(source.accessToken())  
142 - .queryParam("appid", config.getClientId())  
143 - .queryParam("secret", config.getClientSecret())  
144 - .queryParam("code", code)  
145 - .queryParam("grant_type", "authorization_code")  
146 - .build();  
147 - }  
148 -  
149 - /**  
150 - * 返回获取userInfo的url  
151 - *  
152 - * @param authToken 用户授权后的token  
153 - * @return 返回获取userInfo的url  
154 - */  
155 - @Override  
156 - protected String userInfoUrl(AuthToken authToken) {  
157 - return UrlBuilder.fromBaseUrl(source.userInfo())  
158 - .queryParam("access_token", authToken.getAccessToken())  
159 - .queryParam("openid", authToken.getOpenId())  
160 - .queryParam("lang", "zh_CN")  
161 - .build();  
162 - }  
163 -  
164 - /**  
165 - * 返回获取userInfo的url  
166 - *  
167 - * @param refreshToken getAccessToken方法返回的refreshToken  
168 - * @return 返回获取userInfo的url  
169 - */  
170 - @Override  
171 - protected String refreshTokenUrl(String refreshToken) {  
172 - return UrlBuilder.fromBaseUrl(source.refresh())  
173 - .queryParam("appid", config.getClientId())  
174 - .queryParam("grant_type", "refresh_token")  
175 - .queryParam("refresh_token", refreshToken)  
176 - .build();  
177 - }  
178 -}  
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted
1 -cn.iocoder.yudao.framework.social.config.YudaoSocialAutoConfiguration  
2 \ No newline at end of file 0 \ No newline at end of file
yudao-module-system/yudao-module-system-biz/pom.xml
@@ -48,10 +48,6 @@ @@ -48,10 +48,6 @@
48 </dependency> 48 </dependency>
49 <dependency> 49 <dependency>
50 <groupId>cn.iocoder.boot</groupId> 50 <groupId>cn.iocoder.boot</groupId>
51 - <artifactId>yudao-spring-boot-starter-biz-social</artifactId>  
52 - </dependency>  
53 - <dependency>  
54 - <groupId>cn.iocoder.boot</groupId>  
55 <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId> 51 <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
56 </dependency> 52 </dependency>
57 <dependency> 53 <dependency>
@@ -119,6 +115,13 @@ @@ -119,6 +115,13 @@
119 <groupId>org.springframework.boot</groupId> 115 <groupId>org.springframework.boot</groupId>
120 <artifactId>spring-boot-starter-mail</artifactId> 116 <artifactId>spring-boot-starter-mail</artifactId>
121 </dependency> 117 </dependency>
  118 +
  119 + <!-- 三方云服务相关 -->
  120 + <dependency>
  121 + <groupId>com.xingyuv</groupId>
  122 + <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) -->
  123 + </dependency>
  124 +
122 </dependencies> 125 </dependencies>
123 126
124 </project> 127 </project>
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/social/SocialClientServiceImpl.java
@@ -12,7 +12,6 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; @@ -12,7 +12,6 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
12 import cn.iocoder.yudao.framework.common.pojo.PageResult; 12 import cn.iocoder.yudao.framework.common.pojo.PageResult;
13 import cn.iocoder.yudao.framework.common.util.cache.CacheUtils; 13 import cn.iocoder.yudao.framework.common.util.cache.CacheUtils;
14 import cn.iocoder.yudao.framework.common.util.http.HttpUtils; 14 import cn.iocoder.yudao.framework.common.util.http.HttpUtils;
15 -import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;  
16 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientCreateReqVO; 15 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientCreateReqVO;
17 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO; 16 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientPageReqVO;
18 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientUpdateReqVO; 17 import cn.iocoder.yudao.module.system.controller.admin.socail.vo.client.SocialClientUpdateReqVO;
@@ -31,6 +30,7 @@ import com.xingyuv.jushauth.model.AuthResponse; @@ -31,6 +30,7 @@ import com.xingyuv.jushauth.model.AuthResponse;
31 import com.xingyuv.jushauth.model.AuthUser; 30 import com.xingyuv.jushauth.model.AuthUser;
32 import com.xingyuv.jushauth.request.AuthRequest; 31 import com.xingyuv.jushauth.request.AuthRequest;
33 import com.xingyuv.jushauth.utils.AuthStateUtils; 32 import com.xingyuv.jushauth.utils.AuthStateUtils;
  33 +import com.xingyuv.justauth.AuthRequestFactory;
34 import lombok.SneakyThrows; 34 import lombok.SneakyThrows;
35 import lombok.extern.slf4j.Slf4j; 35 import lombok.extern.slf4j.Slf4j;
36 import me.chanjar.weixin.common.bean.WxJsapiSignature; 36 import me.chanjar.weixin.common.bean.WxJsapiSignature;
@@ -59,8 +59,8 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -59,8 +59,8 @@ import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
59 @Slf4j 59 @Slf4j
60 public class SocialClientServiceImpl implements SocialClientService { 60 public class SocialClientServiceImpl implements SocialClientService {
61 61
62 - @Resource // 由于自定义了 YudaoAuthRequestFactory 无法覆盖默认的 AuthRequestFactory,所以只能注入它  
63 - private YudaoAuthRequestFactory yudaoAuthRequestFactory; 62 + @Resource
  63 + private AuthRequestFactory authRequestFactory;
64 64
65 @Resource 65 @Resource
66 private WxMpService wxMpService; 66 private WxMpService wxMpService;
@@ -145,7 +145,7 @@ public class SocialClientServiceImpl implements SocialClientService { @@ -145,7 +145,7 @@ public class SocialClientServiceImpl implements SocialClientService {
145 */ 145 */
146 private AuthRequest buildAuthRequest(Integer socialType, Integer userType) { 146 private AuthRequest buildAuthRequest(Integer socialType, Integer userType) {
147 // 1. 先查找默认的配置项,从 application-*.yaml 中读取 147 // 1. 先查找默认的配置项,从 application-*.yaml 中读取
148 - AuthRequest request = yudaoAuthRequestFactory.get(SocialTypeEnum.valueOfType(socialType).getSource()); 148 + AuthRequest request = authRequestFactory.get(SocialTypeEnum.valueOfType(socialType).getSource());
149 Assert.notNull(request, String.format("社交平台(%d) 不存在", socialType)); 149 Assert.notNull(request, String.format("社交平台(%d) 不存在", socialType));
150 // 2. 查询 DB 的配置项,如果存在则进行覆盖 150 // 2. 查询 DB 的配置项,如果存在则进行覆盖
151 SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(socialType, userType); 151 SocialClientDO client = socialClientMapper.selectBySocialTypeAndUserType(socialType, userType);
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/social/SocialUserServiceImplTest.java
1 package cn.iocoder.yudao.module.system.service.social; 1 package cn.iocoder.yudao.module.system.service.social;
2 2
3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; 3 import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
4 -import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;  
5 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; 4 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
6 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO; 5 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO;
7 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO; 6 import cn.iocoder.yudao.module.system.api.social.dto.SocialUserRespDTO;
@@ -15,6 +14,7 @@ import com.xingyuv.jushauth.model.AuthCallback; @@ -15,6 +14,7 @@ import com.xingyuv.jushauth.model.AuthCallback;
15 import com.xingyuv.jushauth.model.AuthResponse; 14 import com.xingyuv.jushauth.model.AuthResponse;
16 import com.xingyuv.jushauth.model.AuthUser; 15 import com.xingyuv.jushauth.model.AuthUser;
17 import com.xingyuv.jushauth.request.AuthRequest; 16 import com.xingyuv.jushauth.request.AuthRequest;
  17 +import com.xingyuv.justauth.AuthRequestFactory;
18 import org.junit.jupiter.api.Disabled; 18 import org.junit.jupiter.api.Disabled;
19 import org.junit.jupiter.api.Test; 19 import org.junit.jupiter.api.Test;
20 import org.springframework.boot.test.mock.mockito.MockBean; 20 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -46,7 +46,7 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest { @@ -46,7 +46,7 @@ public class SocialUserServiceImplTest extends BaseDbUnitTest {
46 private SocialUserBindMapper socialUserBindMapper; 46 private SocialUserBindMapper socialUserBindMapper;
47 47
48 @MockBean 48 @MockBean
49 - private YudaoAuthRequestFactory authRequestFactory; 49 + private AuthRequestFactory authRequestFactory;
50 50
51 // TODO 芋艿:后续统一修复 51 // TODO 芋艿:后续统一修复
52 // @Test 52 // @Test