From 18e919bde3d925ee76fe29c7a6621c2716b1e4e4 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期五, 21 三月 2025 09:43:31 +0800 Subject: [PATCH] feat(social): 添加 Keycloak社交登录支持 --- ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakRequest.java | 144 ++++++++++++++++++++++++ script/docker/redis/conf/redis.conf | 4 ruoyi-admin/src/main/resources/application-prod.yml | 10 + ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java | 82 ++++++++++++- ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java | 28 ++++ ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/utils/SocialUtils.java | 16 ++ ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java | 7 + ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakSource.java | 36 ++++++ ruoyi-admin/src/main/resources/application.yml | 4 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java | 2 ruoyi-admin/src/main/resources/application-dev.yml | 24 ++- ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/config/properties/SocialLoginConfigProperties.java | 2 12 files changed, 338 insertions(+), 21 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java index 41a802b..5966195 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java @@ -6,6 +6,8 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import com.baomidou.lock.annotation.Lock4j; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -49,6 +51,12 @@ @Slf4j @Service public class SysLoginService { + + @Value("${justauth.type.keycloak.server-url}") + private String keycloakServerUrl; + + @Value("${justauth.type.keycloak.realm}") + private String keycloakRealm; @Value("${user.password.maxRetryCount}") private Integer maxRetryCount; @@ -118,6 +126,26 @@ TenantHelper.clearDynamic(); } recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); + // 鏂板Keycloak鐧诲嚭閫昏緫 + + Long userId = loginUser.getUserId(); + + SysSocialVo social = sysSocialService.selectByUserId(userId); + if (social == null) { + return; + } + + String logoutUrl = keycloakServerUrl + "/realms/" + keycloakRealm + "/protocol/openid-connect/logout"; + HttpRequest request = HttpRequest.get(logoutUrl) + .form("refresh_token", social.getRefreshToken()) + .form("id_token_hint", social.getIdToken()); + + + HttpResponse response = request.execute(); + if (response.isOk()) { + System.out.println("1234"); + } + } catch (NotLoginException ignored) { } finally { try { diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java index 419dbd6..9d62dd8 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java @@ -10,9 +10,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthToken; import me.zhyd.oauth.model.AuthUser; import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.domain.model.PasswordLoginBody; import org.dromara.common.core.domain.model.SocialLoginBody; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.user.UserException; @@ -21,8 +23,13 @@ import org.dromara.common.json.utils.JsonUtils; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.social.config.properties.SocialProperties; +import org.dromara.common.social.keycloak.AuthKeycloakRequest; import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.tenant.helper.TenantHelper; +import org.dromara.system.domain.SysSocial; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.bo.SysSocialBo; +import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysClientVo; import org.dromara.system.domain.vo.SysSocialVo; import org.dromara.system.domain.vo.SysUserVo; @@ -59,15 +66,34 @@ */ @Override public LoginVo login(String body, SysClientVo client) { - SocialLoginBody loginBody = JsonUtils.parseObject(body, SocialLoginBody.class); - ValidatorUtils.validate(loginBody); - AuthResponse<AuthUser> response = SocialUtils.loginAuth( + // 濡傛灉bodyp瀛楃涓蹭腑鍖呭惈login_type瀛楁锛屽垯灏哹ody杞负password鐧诲綍 + AuthUser authUserData = null; + String tenantId = null; + if (body.contains("login_type")) { + PasswordLoginBody passwordLoginBody = JsonUtils.parseObject(body, PasswordLoginBody.class); + tenantId = passwordLoginBody.getTenantId(); + ValidatorUtils.validate(passwordLoginBody); + AuthKeycloakRequest authRequest = SocialUtils.getAuthKeyloakRequest("keycloak", socialProperties); + AuthToken accessToken = authRequest.getAccessToken(passwordLoginBody); + authUserData = authRequest.getUserInfo(accessToken); + + + } else { + SocialLoginBody loginBody = JsonUtils.parseObject(body, SocialLoginBody.class); + tenantId =loginBody.getTenantId(); + ValidatorUtils.validate(loginBody); + AuthResponse<AuthUser> response = SocialUtils.loginAuth( loginBody.getSource(), loginBody.getSocialCode(), loginBody.getSocialState(), socialProperties); - if (!response.ok()) { - throw new ServiceException(response.getMsg()); + if (!response.ok()) { + throw new ServiceException(response.getMsg()); + } + authUserData = response.getData(); } - AuthUser authUserData = response.getData(); + + + + if ("GITEE".equals(authUserData.getSource())) { // 濡傜敤鎴蜂娇鐢� gitee 鐧诲綍椤烘墜 star 缁欎綔鑰呬竴鐐规敮鎸� 鎷掔粷鐧藉珫 HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Vue-Plus") @@ -77,6 +103,47 @@ .formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken())) .executeAsync(); } + if ("KEYCLOAK".equals(authUserData.getSource())) { + // 鏂板KEYCLOAK鐢ㄦ埛鑷姩鍒涘缓閫昏緫 + String authId = authUserData.getSource() + authUserData.getUuid(); + List<SysSocialVo> list = sysSocialService.selectByAuthId(authId); + if (CollUtil.isEmpty(list)) { + // 鑷姩鍒涘缓鏂扮敤鎴� + SysUser newUser = new SysUser(); + newUser.setUserName(authUserData.getUsername()); + newUser.setEmail(authUserData.getEmail()); + newUser.setNickName(authUserData.getNickname()); + newUser.setPassword("Initial123@"); // 鍒濆瀵嗙爜闇�绗﹀悎瀹夊叏绛栫暐 + newUser.setStatus(SystemConstants.NORMAL); + + userMapper.insert(newUser); // 鍋囪瀛樺湪鎻掑叆鏂规硶 + + // 鍒涘缓绀句氦缁戝畾璁板綍 + SysSocialBo newSocial = new SysSocialBo(); + newSocial.setUserId(newUser.getUserId()); + newSocial.setUserName(newUser.getUserName()); + newSocial.setAuthId(authId); + newSocial.setSource(authUserData.getSource()); + newSocial.setTenantId(newUser.getTenantId()); + newSocial.setOpenId(authUserData.getUuid()); + newSocial.setAccessToken(authUserData.getToken().getAccessToken()); + newSocial.setRefreshToken(authUserData.getToken().getRefreshToken()); + newSocial.setIdToken(authUserData.getToken().getIdToken()); + sysSocialService.insertByBo(newSocial); // 闇�纭繚鏈嶅姟鏈夋柊澧炴柟娉� + + // 閲嶆柊鏌ヨ纭繚鏁版嵁鍙敤 + list = sysSocialService.selectByAuthId(authId); + } else { + // 鏇存柊绀句氦缁戝畾璁板綍 + SysSocialBo socialBo = new SysSocialBo(); + socialBo.setId(list.get(0).getId()); + socialBo.setAccessToken(authUserData.getToken().getAccessToken()); + socialBo.setRefreshToken(authUserData.getToken().getRefreshToken()); + socialBo.setIdToken(authUserData.getToken().getIdToken()); + sysSocialService.updateByBo(socialBo); + + } + } List<SysSocialVo> list = sysSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid()); if (CollUtil.isEmpty(list)) { @@ -84,7 +151,8 @@ } SysSocialVo social; if (TenantHelper.isEnable()) { - Optional<SysSocialVo> opt = StreamUtils.findAny(list, x -> x.getTenantId().equals(loginBody.getTenantId())); + String finalTenantId = tenantId; + Optional<SysSocialVo> opt = StreamUtils.findAny(list, x -> x.getTenantId().equals(finalTenantId)); if (opt.isEmpty()) { throw new ServiceException("瀵逛笉璧凤紝浣犳病鏈夋潈闄愮櫥褰曞綋鍓嶇鎴凤紒"); } diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 8bc5b94..fb3a3db 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -49,17 +49,17 @@ driverClassName: com.mysql.cj.jdbc.Driver # jdbc 鎵�鏈夊弬鏁伴厤缃弬鑰� https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 鎵瑰鐞嗕紭鍖� 澶у箙鎻愬崌鎵归噺鎻掑叆鏇存柊鍒犻櫎鎬ц兘(瀵规暟鎹簱鏈夋�ц兘鎹熻�� 浣跨敤鎵归噺鎿嶄綔搴旇�冭檻鎬ц兘闂) - url: jdbc:mysql://192.168.12.240:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root password: 123456 # 浠庡簱鏁版嵁婧� - slave: - lazy: true - type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: - password: +# slave: +# lazy: true +# type: ${spring.datasource.type} +# driverClassName: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# username: +# password: # oracle: # type: ${spring.datasource.type} # driverClassName: oracle.jdbc.OracleDriver @@ -193,6 +193,14 @@ # 鍓嶇澶栫綉璁块棶鍦板潃 address: http://localhost:80 type: + keycloak: + # keycloak 鏈嶅姟鍣ㄥ湴鍧� + server-url: https://lanbaosystem.shlanbao.cn:8443 + realm: lanbao + client-id: DataCapture + client-secret: kplisa4lJHEIM6knqefVbxln85QbA5NX + redirect-uri: ${justauth.address}/social-callback + scopes: [openid, email, phone, profile] maxkey: # maxkey 鏈嶅姟鍣ㄥ湴鍧� # 娉ㄦ剰 濡備笅鍧囬厤缃潎涓嶉渶瑕佷慨鏀� maxkey 宸茬粡鍐呯疆濂戒簡鏁版嵁 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 80c1f96..c63e21a 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -193,8 +193,16 @@ --- # 涓夋柟鎺堟潈 justauth: # 鍓嶇澶栫綉璁块棶鍦板潃 - address: http://localhost:80 + address: http://192.168.0.23:80 type: + keycloak: + # keycloak 鏈嶅姟鍣ㄥ湴鍧� + server-url: https://lanbaosystem.shlanbao.cn:8443 + realm: lanbao + client-id: DataCapture + client-secret: kplisa4lJHEIM6knqefVbxln85QbA5NX + redirect-uri: ${justauth.address}/social-callback + scopes: [openid, email, phone, profile] maxkey: # maxkey 鏈嶅姟鍣ㄥ湴鍧� # 娉ㄦ剰 濡備笅鍧囬厤缃潎涓嶉渶瑕佷慨鏀� maxkey 宸茬粡鍐呯疆濂戒簡鏁版嵁 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index f293140..5a74577 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -1,11 +1,11 @@ # 椤圭洰鐩稿叧閰嶇疆 ruoyi: # 鍚嶇О - name: RuoYi-Vue-Plus + name: Lanbao_QMS # 鐗堟湰 version: ${revision} # 鐗堟潈骞翠唤 - copyrightYear: 2024 + copyrightYear: 2025 captcha: enable: false diff --git a/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/config/properties/SocialLoginConfigProperties.java b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/config/properties/SocialLoginConfigProperties.java index 5f49d9c..ec02328 100644 --- a/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/config/properties/SocialLoginConfigProperties.java +++ b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/config/properties/SocialLoginConfigProperties.java @@ -72,4 +72,6 @@ */ private List<String> scopes; + private String realm; + } diff --git a/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakRequest.java b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakRequest.java new file mode 100644 index 0000000..f3da8a1 --- /dev/null +++ b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakRequest.java @@ -0,0 +1,144 @@ +package org.dromara.common.social.keycloak; + +import cn.hutool.core.codec.Base64; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import com.xkcoding.http.support.HttpHeader; +import me.zhyd.oauth.cache.AuthStateCache; +import me.zhyd.oauth.config.AuthConfig; +import me.zhyd.oauth.exception.AuthException; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthToken; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.request.AuthDefaultRequest; +import me.zhyd.oauth.utils.HttpUtils; +import me.zhyd.oauth.utils.UrlBuilder; +import org.dromara.common.core.domain.model.PasswordLoginBody; +import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.json.utils.JsonUtils; + +/** + * Keycloak OAuth2 璁よ瘉璇锋眰 + */ +public class AuthKeycloakRequest extends AuthDefaultRequest { + + public static final String SERVER_URL = SpringUtils.getProperty("justauth.type.keycloak.server-url"); + public static final String REALM = SpringUtils.getProperty("justauth.type.keycloak.realm"); + + public AuthKeycloakRequest(AuthConfig config) { + super(config, AuthKeycloakSource.KEYCLOAK); + } + + public AuthKeycloakRequest(AuthConfig config, AuthStateCache authStateCache) { + super(config, AuthKeycloakSource.KEYCLOAK, authStateCache); + } + + + public AuthToken getAccessToken(PasswordLoginBody loginBody) { + + HttpRequest request = HttpRequest.post(SERVER_URL + "/realms/" + REALM + "/protocol/openid-connect/token") + .form("grant_type", "password") + .form("client_id", config.getClientId()) + .form("client_secret", config.getClientSecret()) + .form("username", loginBody.getUsername()) + .form("password", loginBody.getPassword()) + .form("scope", "openid"); + + HttpResponse response = request.execute(); + + Dict object = JsonUtils.parseMap(response.body()); + + if (object.containsKey("error")) { + throw new AuthException(object.getStr("error_description")); + } + if (object.containsKey("message")) { + throw new AuthException(object.getStr("message")); + } + return AuthToken.builder() + .accessToken(object.getStr("access_token")) + .refreshToken(object.getStr("refresh_token")) + .idToken(object.getStr("id_token")) + .tokenType(object.getStr("token_type")) + .expireIn(object.getInt("expires_in")) + .build(); + } + + @Override + public AuthToken getAccessToken(AuthCallback authCallback) { + String body = doPostAuthorizationCode(authCallback.getCode()); + Dict object = JsonUtils.parseMap(body); + + if (object.containsKey("error")) { + throw new AuthException(object.getStr("error_description")); + } + if (object.containsKey("message")) { + throw new AuthException(object.getStr("message")); + } + + return AuthToken.builder() + .accessToken(object.getStr("access_token")) + .refreshToken(object.getStr("refresh_token")) + .idToken(object.getStr("id_token")) + .tokenType(object.getStr("token_type")) + .expireIn(object.getInt("expires_in")) + .build(); + } + + @Override + public AuthUser getUserInfo(AuthToken authToken) { + String body = doGetUserInfo(authToken); + Dict object = JsonUtils.parseMap(body); + + if (object.containsKey("error")) { + throw new AuthException(object.getStr("error_description")); + } + if (object.containsKey("message")) { + throw new AuthException(object.getStr("message")); + } + + return AuthUser.builder() + .uuid(object.getStr("sub")) + .username(object.getStr("preferred_username")) + .nickname(object.getStr("name")) + .email(object.getStr("email")) + .token(authToken) + .source(this.source.toString()) + .build(); + } + + @Override + protected String doPostAuthorizationCode(String code) { + HttpRequest request = HttpRequest.post(source.accessToken()) + .header("Authorization", "Basic " + Base64.encode("%s:%s".formatted(config.getClientId(), config.getClientSecret()))) + .form("grant_type", "authorization_code") + .form("code", code) + .form("redirect_uri", config.getRedirectUri()); + HttpResponse response = request.execute(); + return response.body(); + } + + @Override + protected String doGetUserInfo(AuthToken authToken) { + try { + return new HttpUtils(config.getHttpConfig()).get(source.userInfo(), null, new HttpHeader() + .add("Content-Type", "application/json") + .add("Authorization", "Bearer " + authToken.getAccessToken()), false).getBody(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public String authorize(String state) { + return UrlBuilder.fromBaseUrl(super.authorize(state)) + .queryParam("scope", StrUtil.join("%20", config.getScopes())) + .build(); + } + + + + +} diff --git a/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakSource.java b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakSource.java new file mode 100644 index 0000000..e232c34 --- /dev/null +++ b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/keycloak/AuthKeycloakSource.java @@ -0,0 +1,36 @@ +package org.dromara.common.social.keycloak; + +import me.zhyd.oauth.config.AuthSource; +import me.zhyd.oauth.request.AuthDefaultRequest; + +public enum AuthKeycloakSource implements AuthSource { + KEYCLOAK { + /** + * 鎺堟潈鐨刟pi + */ + @Override + public String authorize() { + return String.format("%s/realms/%s/protocol/openid-connect/auth", AuthKeycloakRequest.SERVER_URL, AuthKeycloakRequest.REALM); + } + + @Override + public String accessToken() { + return String.format("%s/realms/%s/protocol/openid-connect/token", AuthKeycloakRequest.SERVER_URL, AuthKeycloakRequest.REALM); + } + + @Override + public String userInfo() { + return String.format("%s/realms/%s/protocol/openid-connect/userinfo", AuthKeycloakRequest.SERVER_URL, AuthKeycloakRequest.REALM); + } + + + public String logout() { + return String.format("%s/realms/%s/protocol/openid-connect/logout", AuthKeycloakRequest.SERVER_URL, AuthKeycloakRequest.REALM); + } + + @Override + public Class<? extends AuthDefaultRequest> getTargetClass() { + return AuthKeycloakRequest.class; + } + } +} diff --git a/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/utils/SocialUtils.java b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/utils/SocialUtils.java index db696e5..5a6b370 100644 --- a/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/utils/SocialUtils.java +++ b/ruoyi-common/ruoyi-common-social/src/main/java/org/dromara/common/social/utils/SocialUtils.java @@ -10,6 +10,7 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.social.config.properties.SocialLoginConfigProperties; import org.dromara.common.social.config.properties.SocialProperties; +import org.dromara.common.social.keycloak.AuthKeycloakRequest; import org.dromara.common.social.maxkey.AuthMaxKeyRequest; import org.dromara.common.social.topiam.AuthTopIamRequest; @@ -66,8 +67,23 @@ case "aliyun" -> new AuthAliyunRequest(builder.build(), STATE_CACHE); case "maxkey" -> new AuthMaxKeyRequest(builder.build(), STATE_CACHE); case "topiam" -> new AuthTopIamRequest(builder.build(), STATE_CACHE); + case "keycloak" -> new AuthKeycloakRequest(builder.build(), STATE_CACHE); default -> throw new AuthException("鏈幏鍙栧埌鏈夋晥鐨凙uth閰嶇疆"); }; } + + + public static AuthKeycloakRequest getAuthKeyloakRequest(String source, SocialProperties socialProperties) { + SocialLoginConfigProperties obj = socialProperties.getType().get(source); + if (ObjectUtil.isNull(obj)) { + throw new AuthException("涓嶆敮鎸佺殑绗笁鏂圭櫥褰曠被鍨�"); + } + AuthConfig.AuthConfigBuilder builder = AuthConfig.builder() + .clientId(obj.getClientId()) + .clientSecret(obj.getClientSecret()) + .redirectUri(obj.getRedirectUri()) + .scopes(obj.getScopes()); + return new AuthKeycloakRequest(builder.build(), STATE_CACHE); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java index cc7016e..4ec49aa 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysSocialService.java @@ -49,5 +49,5 @@ */ List<SysSocialVo> selectByAuthId(String authId); - + SysSocialVo selectByUserId(Long userId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java index 9c54cbc..7fe35b9 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysSocialServiceImpl.java @@ -109,4 +109,11 @@ return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getAuthId, authId)); } + + @Override + public SysSocialVo selectByUserId(Long userId) { + SysSocialVo socialVo = baseMapper.selectVoOne(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId)); + return socialVo; + } + } diff --git a/script/docker/redis/conf/redis.conf b/script/docker/redis/conf/redis.conf index 72255c6..4af3b79 100644 --- a/script/docker/redis/conf/redis.conf +++ b/script/docker/redis/conf/redis.conf @@ -1,11 +1,11 @@ # redis 瀵嗙爜 -requirepass ruoyi123 +#requirepass ruoyi123 # key 鐩戝惉鍣ㄩ厤缃� # notify-keyspace-events Ex # 閰嶇疆鎸佷箙鍖栨枃浠跺瓨鍌ㄨ矾寰� -dir /redis/data +dir /data/redis/data # 閰嶇疆rdb # 15鍒嗛挓鍐呮湁鑷冲皯1涓猭ey琚洿鏀瑰垯杩涜蹇収 save 900 1 -- Gitblit v1.9.3