From 266b6173b1333cc20c67c67db6011b017f714ca2 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 9 Nov 2022 21:01:22 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.3.2=E3=80=91=E3=80=90auth=E3=80=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=9F=BA=E4=BA=8Etoken=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E7=9A=84=E8=BF=87=E7=A8=8B=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=A7=9F=E6=88=B7=E7=9A=84=E7=94=A8=E6=88=B7=E4=BC=9A?= =?UTF-8?q?=E8=AF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roses/kernel/auth/api/AuthServiceApi.java | 6 ++-- .../kernel/auth/auth/AuthServiceImpl.java | 30 ++++++++++++++++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/AuthServiceApi.java b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/AuthServiceApi.java index b03ee36fa..83b8caf35 100644 --- a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/AuthServiceApi.java +++ b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/AuthServiceApi.java @@ -128,12 +128,12 @@ public interface AuthServiceApi { /** * 为指定token创建新的登录信息 * - * @param token 用户旧的token - * @param account 用户账号 + * @param token 用户旧的token + * @param defaultJwtPayload jwt的payload信息 * @return 新的当前登录用户 * @author fengshuonan * @date 2022/10/17 0:04 */ - LoginUser createNewLoginInfo(String token, String account); + LoginUser createNewLoginInfo(String token, DefaultJwtPayload defaultJwtPayload); } diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java index dad1dff23..3029ac706 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/auth/AuthServiceImpl.java @@ -55,6 +55,8 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.sso.SsoLoginCodeRequest; import cn.stylefeng.roses.kernel.auth.api.pojo.sso.SsoProperties; import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.demo.expander.DemoConfigExpander; +import cn.stylefeng.roses.kernel.dsctn.api.constants.DatasourceContainerConstants; +import cn.stylefeng.roses.kernel.dsctn.api.context.CurrentDataSourceContext; import cn.stylefeng.roses.kernel.jwt.JwtTokenOperator; import cn.stylefeng.roses.kernel.jwt.api.context.JwtContext; import cn.stylefeng.roses.kernel.jwt.api.exception.JwtException; @@ -63,6 +65,7 @@ import cn.stylefeng.roses.kernel.jwt.api.pojo.config.JwtConfig; import cn.stylefeng.roses.kernel.jwt.api.pojo.payload.DefaultJwtPayload; import cn.stylefeng.roses.kernel.log.api.LoginLogServiceApi; import cn.stylefeng.roses.kernel.message.api.expander.WebSocketConfigExpander; +import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.tenant.RequestTenantCodeHolder; import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil; import cn.stylefeng.roses.kernel.scanner.api.exception.ScannerException; @@ -270,13 +273,32 @@ public class AuthServiceImpl implements AuthServiceApi { } @Override - public LoginUser createNewLoginInfo(String token, String account) { + public LoginUser createNewLoginInfo(String token, DefaultJwtPayload defaultJwtPayload) { // 获取用户的信息 - UserLoginInfoDTO userLoginInfo = userServiceApi.getUserLoginInfo(account); + String account = defaultJwtPayload.getAccount(); - // 创建用户会话信息 - sessionManagerApi.updateSession(token, userLoginInfo.getLoginUser()); + // 获取用户租户信息 + String tenantCode = defaultJwtPayload.getTenantCode(); + + UserLoginInfoDTO userLoginInfo; + try { + // 如果有特定租户则进行切换操作 + if (StrUtil.isNotEmpty(tenantCode) && !DatasourceContainerConstants.MASTER_DATASOURCE_NAME.equals(tenantCode)) { + CurrentDataSourceContext.setDataSourceName(RuleConstants.TENANT_DB_PREFIX + tenantCode); + } + + // 获取用户信息 + userLoginInfo = userServiceApi.getUserLoginInfo(account); + LoginUser loginUser = userLoginInfo.getLoginUser(); + loginUser.setTenantCode(tenantCode); + + // 创建用户会话信息 + sessionManagerApi.updateSession(token, loginUser); + } finally { + // 清除租户信息 + CurrentDataSourceContext.clearDataSourceName(); + } return userLoginInfo.getLoginUser(); }