From 4ba7d2acc6340161fb0b19231cef9a5fc4700c01 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 7 Apr 2025 16:45:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BD=91=E5=85=B3=E5=92=8C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=81=B0=E5=BA=A6=E8=83=BD=E5=8A=9B=EF=BC=9A?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E7=81=B0=E5=BA=A6=E6=94=AF=E6=8C=81=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E4=BA=A4=E4=BA=92=E3=80=81=E7=81=B0=E5=BA=A6=E5=A4=9A?= =?UTF-8?q?=E5=AE=9E=E4=BE=8B=E5=A4=9A=E7=89=88=E6=9C=AC=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imes/gateway/filter/security/LoginUser.java | 5 +++++ .../security/TokenAuthenticationFilter.java | 3 ++- .../gateway/util/SecurityFrameworkUtils.java | 17 +++-------------- .../dto/OAuth2AccessTokenCheckRespDTO.java | 3 +++ .../admin/organ/vo/organ/OrganSaveReqVO.java | 4 ++++ .../dataobject/oauth2/OAuth2AccessTokenDO.java | 6 ++++++ .../dal/dataobject/organ/OrganizationDO.java | 4 ++-- .../system/dal/dataobject/user/AdminUserDO.java | 6 ++++++ .../redis/oauth2/OAuth2AccessTokenRedisDAO.java | 3 ++- .../service/auth/AdminAuthServiceImpl.java | 15 +++++++++++++-- .../service/oauth2/OAuth2TokenServiceImpl.java | 3 ++- .../src/main/resources/application.yaml | 3 +++ 12 files changed, 51 insertions(+), 21 deletions(-) diff --git a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/LoginUser.java b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/LoginUser.java index 646ecada7..0300a61e2 100644 --- a/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/LoginUser.java +++ b/cf-gateway/src/main/java/com/cf/imes/gateway/filter/security/LoginUser.java @@ -64,4 +64,9 @@ public class LoginUser { * 灰度版本号 */ private String grayVersion; + + /** + * 灰度默认版本号 + */ + private String grayDefaultVersion; } 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 3de9bffa7..239c774c9 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 @@ -150,7 +150,8 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered { .setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes()) .setLarge(tokenInfo.getLarge()).setDbNo(tokenInfo.getDbNo()).setTableNo(tokenInfo.getTableNo()) .setDataCode(tokenInfo.getDataCode()).setIsSupAdmin(tokenInfo.getIsSupAdmin()) - .setNickname(tokenInfo.getNickname()).setDeptId(tokenInfo.getDeptId()).setGrayVersion(tokenInfo.getGrayVersion()); + .setNickname(tokenInfo.getNickname()).setDeptId(tokenInfo.getDeptId()) + .setGrayVersion(tokenInfo.getGrayVersion()).setGrayDefaultVersion(tokenInfo.getGrayDefaultVersion()); } @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 956f0b786..0125a4fa8 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 @@ -96,16 +96,6 @@ public class SecurityFrameworkUtils { return MapUtil.getLong(exchange.getAttributes(), LOGIN_USER_ID_ATTR); } - /** - * 获得登录用户的类型 - * - * @param exchange 请求 - * @return 用户类型 - */ - public static Integer getLoginUserType(ServerWebExchange exchange) { - return MapUtil.getInt(exchange.getAttributes(), LOGIN_USER_TYPE_ATTR); - } - /** * 将 user 并设置到 login-user 的请求头,使用 json 存储值 * @@ -126,13 +116,12 @@ public class SecurityFrameworkUtils { builder.header(ORGAN_ID, user.getOrganId().toString()); // 灰度版本号设置到headers,继续往下filter选择实例 String grayVersion = user.getGrayVersion(); + String grayDefaultVersion = user.getGrayDefaultVersion(); if (StringUtils.hasText(grayVersion)) { builder.header(LOGIN_USER_GRAY_VERSION, grayVersion); + } else if (StringUtils.hasText(grayDefaultVersion)) { + builder.header(LOGIN_USER_GRAY_VERSION, grayDefaultVersion); } } - public static void setOrganHeader(ServerHttpRequest.Builder builder, LoginUser user) { - builder.header(ORGAN_ID, user.getOrganId().toString()); - } - } diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java index ce707e482..f3a986f15 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java @@ -40,4 +40,7 @@ public class OAuth2AccessTokenCheckRespDTO implements Serializable { @Schema(description = "灰度版本号", example = "1") private String grayVersion; + + @Schema(description = "灰度默认版本号", example = "1") + private String grayDefaultVersion; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java index ea706ecb0..2ee4d399d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganSaveReqVO.java @@ -106,4 +106,8 @@ public class OrganSaveReqVO { @Schema(description = "纬度") @Size(max = 64, message = "纬度长度不能超过64个字符") private String latitude; + + @Schema(description = "是否开启灰度,0:开启、1:关闭", example = "0") + @CommonStatus + private Integer grayStatus; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java index 914ef51a8..ae9fad5dd 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/oauth2/OAuth2AccessTokenDO.java @@ -105,4 +105,10 @@ public class OAuth2AccessTokenDO extends BaseDO { */ @TableField(exist = false) private String grayVersion; + + /** + * 灰度默认版本号 + */ + @TableField(exist = false) + private String grayDefaultVersion; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/organ/OrganizationDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/organ/OrganizationDO.java index ec6c7d293..05cced908 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/organ/OrganizationDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/organ/OrganizationDO.java @@ -149,7 +149,7 @@ public class OrganizationDO extends BaseDO { private String latitude; /** - * 灰度版本号 + * 是否开启灰度 */ - private String grayVersion; + private Integer grayStatus; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/AdminUserDO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/AdminUserDO.java index f70fb2e58..c4b0c681f 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/AdminUserDO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/dataobject/user/AdminUserDO.java @@ -111,4 +111,10 @@ public class AdminUserDO extends OrganBaseDO { */ @TableField(exist = false) private String grayVersion; + + /** + * 灰度默认版本号 + */ + @TableField(exist = false) + private String grayDefaultVersion; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java index cbe1d9421..07fad78c9 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/redis/oauth2/OAuth2AccessTokenRedisDAO.java @@ -1,5 +1,6 @@ package com.cf.imes.module.system.dal.redis.oauth2; +import com.alibaba.fastjson.JSON; import com.cf.imes.framework.common.util.collection.CollectionUtils; import com.cf.imes.framework.common.util.json.JsonUtils; import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO; @@ -53,7 +54,7 @@ public class OAuth2AccessTokenRedisDAO { // 清理多余字段,避免缓存 accessTokenDO.setUpdater(null).setUpdateTime(null).setCreateTime(null).setCreator(null).setDeleted(null); // 创建有效期1天的token - String jsonString = JsonUtils.toJsonString(accessTokenDO); + String jsonString = JSON.toJSONString(accessTokenDO); stringRedisTemplate.opsForValue().set(redisKey, jsonString, 1, TimeUnit.DAYS); } 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 f0cc57660..be5b1a745 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 @@ -96,6 +96,12 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Value("${chenfeng.captcha.enable:true}") private Boolean captchaEnable; + @Value("${chenfeng.gray.version:1.0.0}") + private String grayVersion; + + @Value("${chenfeng.gray.default-version:1.0.0}") + private String grayDefaultVersion; + @Override public AdminUserDO authenticate(AuthLoginReqVO reqVO) { String username = reqVO.getUsername(); @@ -141,8 +147,13 @@ public class AdminAuthServiceImpl implements AdminAuthService { if (StringUtils.isBlank(dataSourceCode)) { throw exception(ORGAN_DATA_CODE_NOT_EXISTS); } - // 机构的灰度版本设置到user - user.setGrayVersion(organ.getGrayVersion()); + if (CommonStatusEnum.ENABLE.getStatus().equals(organ.getGrayStatus())) { + // 机构启用灰度、版本赋值到user + user.setGrayVersion(grayVersion); + } else { + // 未启用灰度的机构需要默认版本号来做网关实例选择 + user.setGrayDefaultVersion(grayDefaultVersion); + } // 创建 Token 令牌,记录登录日志 return createTokenAfterLoginSuccess(user, reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, dataSourceCode); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java index f0887a848..90ea1cd13 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -223,7 +223,8 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { .setOrganId(organId) .setNickname(user.getNickname()) .setDeptId(user.getDeptId()) - .setGrayVersion(user.getGrayVersion()); + .setGrayVersion(user.getGrayVersion()) + .setGrayDefaultVersion(user.getGrayDefaultVersion()); if (organId != null) { OrganContextHolder.setOrganId(organId); } diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml index 9953df20e..ecb15034c 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/application.yaml @@ -228,4 +228,7 @@ chenfeng: cache: lock-timeout: 300000 lock-wait-time: 500 + gray: + default-version: 1.0.0 + version: 1.0.0 debug: false