From 00016e4c9b67c8218fcb0937eca9646051edb61b Mon Sep 17 00:00:00 2001 From: yangsb Date: Fri, 12 Apr 2024 14:49:44 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=A0=87=E8=AF=86=E7=9A=84=E8=8E=B7=E5=8F=96=E9=80=94=E5=BE=84?= =?UTF-8?q?=EF=BC=8C=E7=94=B1=E5=8E=9F=E5=85=88=E4=BB=8E=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E4=BC=A0=E9=80=92=EF=BC=8C=E5=88=B0=E4=BB=8E=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BC=A0=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/GlobalErrorCodeConstants.java | 1 + .../web/core/filter/DataSourceFilter.java | 8 ++--- .../security/TokenAuthenticationFilter.java | 3 +- .../gateway/util/SecurityFrameworkUtils.java | 2 ++ .../system/enums/ErrorCodeConstants.java | 1 + .../service/auth/AdminAuthServiceImpl.java | 31 ++++++++++++++++--- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/exception/enums/GlobalErrorCodeConstants.java b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/exception/enums/GlobalErrorCodeConstants.java index f7c448038..a31e456ec 100644 --- a/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/exception/enums/GlobalErrorCodeConstants.java +++ b/cf-framework/cf-common/src/main/java/com/cf/imes/framework/common/exception/enums/GlobalErrorCodeConstants.java @@ -26,6 +26,7 @@ public interface GlobalErrorCodeConstants { ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许 ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试"); ErrorCode DATA_SOURCE_CODE_NOT_FOUND = new ErrorCode(430, "未传递数据源标识"); + ErrorCode ORGAN_ID_NOT_FOUND = new ErrorCode(431, "未传组织标识"); // ========== 服务端错误段 ========== diff --git a/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/web/core/filter/DataSourceFilter.java b/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/web/core/filter/DataSourceFilter.java index d16ed352a..985704a8f 100644 --- a/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/web/core/filter/DataSourceFilter.java +++ b/cf-framework/cf-spring-boot-starter-web/src/main/java/com/cf/imes/framework/web/core/filter/DataSourceFilter.java @@ -19,7 +19,7 @@ import static com.cf.imes.framework.common.exception.enums.GlobalErrorCodeConsta */ public class DataSourceFilter extends OncePerRequestFilter { //数据源编码 - private static final String DATA_SOURCE_CODE = "dataCode"; + private static final String DATA_SOURCE_CODE = "data-code"; private WebProperties webProperties; @@ -36,12 +36,12 @@ public class DataSourceFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - String dataSourceCode = request.getHeader(DATA_SOURCE_CODE); - if(StrUtil.isBlank(dataSourceCode)) { + String dataCode = request.getHeader(DATA_SOURCE_CODE); + if(StrUtil.isEmpty(dataCode)) { ServletUtils.writeJSON(response, CommonResult.error(DATA_SOURCE_CODE_NOT_FOUND)); return; } - DynamicDataSourceContextHolder.push(dataSourceCode); + DynamicDataSourceContextHolder.push(dataCode); filterChain.doFilter(request, response); DynamicDataSourceContextHolder.clear(); } diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java index 50dbed5d3..e500cebec 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/TokenAuthenticationFilter.java @@ -152,7 +152,8 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered { OAuth2AccessTokenCheckRespDTO tokenInfo = result.getData(); return new LoginUser().setId(tokenInfo.getUserId()).setUserType(tokenInfo.getUserType()) .setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes()) - .setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo()); + .setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo()) + .setDataCode(tokenInfo.getDataCode()); } @Override diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java b/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java index d9f620a96..ebc50708a 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/util/SecurityFrameworkUtils.java @@ -24,6 +24,7 @@ public class SecurityFrameworkUtils { private static final String LOGIN_USER_ID_ATTR = "login-user-id"; private static final String LOGIN_USER_TYPE_ATTR = "login-user-type"; + private static final String DATA_CODE = "data-code"; private SecurityFrameworkUtils() {} @@ -101,6 +102,7 @@ public class SecurityFrameworkUtils { */ public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) { builder.header(LOGIN_USER_HEADER, JsonUtils.toJsonString(user)); + builder.header(DATA_CODE, user.getDataCode()); } } diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java index 34c0edb81..3ad2a80a1 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/enums/ErrorCodeConstants.java @@ -109,6 +109,7 @@ public interface ErrorCodeConstants { ErrorCode ORGAN_CAN_NOT_UPDATE_SYSTEM = new ErrorCode(1_002_015_003, "系统组织不能进行修改、删除等操作!"); ErrorCode ORGAN_NAME_DUPLICATE = new ErrorCode(1_002_015_004, "名字为【{}】的组织已存在"); ErrorCode ORGAN_WEBSITE_DUPLICATE = new ErrorCode(1_002_015_005, "域名为【{}】的组织已存在"); + ErrorCode ORGAN_DATA_CODE_NOT_EXISTS = new ErrorCode(1_002_015_006, "组织未配置数据源标识"); // ========== 组织套餐 1-002-016-000 ========== ErrorCode TENANT_PACKAGE_NOT_EXISTS = new ErrorCode(1_002_016_000, "组织套餐不存在"); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java index 5b877af53..0b08c60bc 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/auth/AdminAuthServiceImpl.java @@ -1,6 +1,7 @@ package com.cf.imes.module.system.service.auth; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.cf.imes.framework.common.enums.CommonStatusEnum; import com.cf.imes.framework.common.enums.UserTypeEnum; import com.cf.imes.framework.common.exception.ServerException; @@ -47,6 +48,7 @@ import java.util.Objects; import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.cf.imes.framework.common.util.servlet.ServletUtils.getClientIP; +import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORGAN_DATA_CODE_NOT_EXISTS; import static com.cf.imes.module.system.enums.ErrorCodeConstants.ORGAN_NOT_EXISTS; /** @@ -121,8 +123,14 @@ public class AdminAuthServiceImpl implements AdminAuthService { socialUserService.bindSocialUser(new SocialUserBindReqDTO(user.getId(), getUserType().getValue(), reqVO.getSocialType(), reqVO.getSocialCode(), reqVO.getSocialState())); } + Long organId = user.getOrganId(); + OrganizationDO organ = organService.getOrgan(organId); + String dataSourceCode = organ.getDataSourceCode(); + if(StrUtil.isBlank(dataSourceCode)) { + throw exception(ORGAN_DATA_CODE_NOT_EXISTS); + } // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME); + return createTokenAfterLoginSuccess(user.getId(), reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, dataSourceCode); } @Override @@ -145,9 +153,15 @@ public class AdminAuthServiceImpl implements AdminAuthService { if (user == null) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.USER_NOT_EXISTS); } + Long organId = user.getOrganId(); + OrganizationDO organ = organService.getOrgan(organId); + String dataSourceCode = organ.getDataSourceCode(); + if(StrUtil.isBlank(dataSourceCode)) { + throw exception(ORGAN_DATA_CODE_NOT_EXISTS); + } // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE); + return createTokenAfterLoginSuccess(user.getId(), reqVO.getMobile(), LoginLogTypeEnum.LOGIN_MOBILE, dataSourceCode); } private void createLoginLog(Long userId, String username, @@ -184,8 +198,15 @@ public class AdminAuthServiceImpl implements AdminAuthService { throw ServiceExceptionUtil.exception(ErrorCodeConstants.USER_NOT_EXISTS); } + Long organId = user.getOrganId(); + OrganizationDO organ = organService.getOrgan(organId); + String dataSourceCode = organ.getDataSourceCode(); + if(StrUtil.isBlank(dataSourceCode)) { + throw exception(ORGAN_DATA_CODE_NOT_EXISTS); + } + // 创建 Token 令牌,记录登录日志 - return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); + return createTokenAfterLoginSuccess(user.getId(), user.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL, dataSourceCode); } @VisibleForTesting @@ -207,7 +228,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { } } - private AuthLoginRespVO createTokenAfterLoginSuccess(Long userId, String username, LoginLogTypeEnum logType) { + private AuthLoginRespVO createTokenAfterLoginSuccess(Long userId, String username, LoginLogTypeEnum logType, String dataCode) { // 插入登陆日志 createLoginLog(userId, username, logType, LoginResultEnum.SUCCESS); /*Long organId = OrganContextHolder.getOrganId(); @@ -217,7 +238,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { }*/ // 创建访问令牌 OAuth2AccessTokenDO accessTokenDO = oauth2TokenService.createAccessToken(userId, getUserType().getValue(), - OAuth2ClientConstants.CLIENT_ID_DEFAULT, null, null, null, null, null); + OAuth2ClientConstants.CLIENT_ID_DEFAULT, null, null, null, null, dataCode); // 构建返回结果 return AuthConvert.INSTANCE.convert(accessTokenDO); }