mirror of
http://192.168.1.205:9980/cf_devdept2/cf_imes_server.git
synced 2026-08-12 21:02:08 +08:00
新增网关和服务灰度能力:组织灰度支持前端交互、灰度多实例多版本优化
This commit is contained in:
@@ -64,4 +64,9 @@ public class LoginUser {
|
|||||||
* 灰度版本号
|
* 灰度版本号
|
||||||
*/
|
*/
|
||||||
private String grayVersion;
|
private String grayVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 灰度默认版本号
|
||||||
|
*/
|
||||||
|
private String grayDefaultVersion;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -150,7 +150,8 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
|
|||||||
.setOrganId(tokenInfo.getOrganId()).setScopes(tokenInfo.getScopes())
|
.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()).setIsSupAdmin(tokenInfo.getIsSupAdmin())
|
.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
|
@Override
|
||||||
|
|||||||
@@ -96,16 +96,6 @@ public class SecurityFrameworkUtils {
|
|||||||
return MapUtil.getLong(exchange.getAttributes(), LOGIN_USER_ID_ATTR);
|
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 存储值
|
* 将 user 并设置到 login-user 的请求头,使用 json 存储值
|
||||||
*
|
*
|
||||||
@@ -126,13 +116,12 @@ public class SecurityFrameworkUtils {
|
|||||||
builder.header(ORGAN_ID, user.getOrganId().toString());
|
builder.header(ORGAN_ID, user.getOrganId().toString());
|
||||||
// 灰度版本号设置到headers,继续往下filter选择实例
|
// 灰度版本号设置到headers,继续往下filter选择实例
|
||||||
String grayVersion = user.getGrayVersion();
|
String grayVersion = user.getGrayVersion();
|
||||||
|
String grayDefaultVersion = user.getGrayDefaultVersion();
|
||||||
if (StringUtils.hasText(grayVersion)) {
|
if (StringUtils.hasText(grayVersion)) {
|
||||||
builder.header(LOGIN_USER_GRAY_VERSION, 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());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -40,4 +40,7 @@ public class OAuth2AccessTokenCheckRespDTO implements Serializable {
|
|||||||
|
|
||||||
@Schema(description = "灰度版本号", example = "1")
|
@Schema(description = "灰度版本号", example = "1")
|
||||||
private String grayVersion;
|
private String grayVersion;
|
||||||
|
|
||||||
|
@Schema(description = "灰度默认版本号", example = "1")
|
||||||
|
private String grayDefaultVersion;
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -106,4 +106,8 @@ public class OrganSaveReqVO {
|
|||||||
@Schema(description = "纬度")
|
@Schema(description = "纬度")
|
||||||
@Size(max = 64, message = "纬度长度不能超过64个字符")
|
@Size(max = 64, message = "纬度长度不能超过64个字符")
|
||||||
private String latitude;
|
private String latitude;
|
||||||
|
|
||||||
|
@Schema(description = "是否开启灰度,0:开启、1:关闭", example = "0")
|
||||||
|
@CommonStatus
|
||||||
|
private Integer grayStatus;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -105,4 +105,10 @@ public class OAuth2AccessTokenDO extends BaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String grayVersion;
|
private String grayVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 灰度默认版本号
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String grayDefaultVersion;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -149,7 +149,7 @@ public class OrganizationDO extends BaseDO {
|
|||||||
private String latitude;
|
private String latitude;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 灰度版本号
|
* 是否开启灰度
|
||||||
*/
|
*/
|
||||||
private String grayVersion;
|
private Integer grayStatus;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -111,4 +111,10 @@ public class AdminUserDO extends OrganBaseDO {
|
|||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private String grayVersion;
|
private String grayVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 灰度默认版本号
|
||||||
|
*/
|
||||||
|
@TableField(exist = false)
|
||||||
|
private String grayDefaultVersion;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,6 @@
|
|||||||
package com.cf.imes.module.system.dal.redis.oauth2;
|
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.collection.CollectionUtils;
|
||||||
import com.cf.imes.framework.common.util.json.JsonUtils;
|
import com.cf.imes.framework.common.util.json.JsonUtils;
|
||||||
import com.cf.imes.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO;
|
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);
|
accessTokenDO.setUpdater(null).setUpdateTime(null).setCreateTime(null).setCreator(null).setDeleted(null);
|
||||||
// 创建有效期1天的token
|
// 创建有效期1天的token
|
||||||
String jsonString = JsonUtils.toJsonString(accessTokenDO);
|
String jsonString = JSON.toJSONString(accessTokenDO);
|
||||||
stringRedisTemplate.opsForValue().set(redisKey, jsonString, 1, TimeUnit.DAYS);
|
stringRedisTemplate.opsForValue().set(redisKey, jsonString, 1, TimeUnit.DAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-2
@@ -96,6 +96,12 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
|||||||
@Value("${chenfeng.captcha.enable:true}")
|
@Value("${chenfeng.captcha.enable:true}")
|
||||||
private Boolean captchaEnable;
|
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
|
@Override
|
||||||
public AdminUserDO authenticate(AuthLoginReqVO reqVO) {
|
public AdminUserDO authenticate(AuthLoginReqVO reqVO) {
|
||||||
String username = reqVO.getUsername();
|
String username = reqVO.getUsername();
|
||||||
@@ -141,8 +147,13 @@ public class AdminAuthServiceImpl implements AdminAuthService {
|
|||||||
if (StringUtils.isBlank(dataSourceCode)) {
|
if (StringUtils.isBlank(dataSourceCode)) {
|
||||||
throw exception(ORGAN_DATA_CODE_NOT_EXISTS);
|
throw exception(ORGAN_DATA_CODE_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
// 机构的灰度版本设置到user
|
if (CommonStatusEnum.ENABLE.getStatus().equals(organ.getGrayStatus())) {
|
||||||
user.setGrayVersion(organ.getGrayVersion());
|
// 机构启用灰度、版本赋值到user
|
||||||
|
user.setGrayVersion(grayVersion);
|
||||||
|
} else {
|
||||||
|
// 未启用灰度的机构需要默认版本号来做网关实例选择
|
||||||
|
user.setGrayDefaultVersion(grayDefaultVersion);
|
||||||
|
}
|
||||||
// 创建 Token 令牌,记录登录日志
|
// 创建 Token 令牌,记录登录日志
|
||||||
return createTokenAfterLoginSuccess(user, reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, dataSourceCode);
|
return createTokenAfterLoginSuccess(user, reqVO.getUsername(), LoginLogTypeEnum.LOGIN_USERNAME, dataSourceCode);
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -223,7 +223,8 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
|||||||
.setOrganId(organId)
|
.setOrganId(organId)
|
||||||
.setNickname(user.getNickname())
|
.setNickname(user.getNickname())
|
||||||
.setDeptId(user.getDeptId())
|
.setDeptId(user.getDeptId())
|
||||||
.setGrayVersion(user.getGrayVersion());
|
.setGrayVersion(user.getGrayVersion())
|
||||||
|
.setGrayDefaultVersion(user.getGrayDefaultVersion());
|
||||||
if (organId != null) {
|
if (organId != null) {
|
||||||
OrganContextHolder.setOrganId(organId);
|
OrganContextHolder.setOrganId(organId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -228,4 +228,7 @@ chenfeng:
|
|||||||
cache:
|
cache:
|
||||||
lock-timeout: 300000
|
lock-timeout: 300000
|
||||||
lock-wait-time: 500
|
lock-wait-time: 500
|
||||||
|
gray:
|
||||||
|
default-version: 1.0.0
|
||||||
|
version: 1.0.0
|
||||||
debug: false
|
debug: false
|
||||||
|
|||||||
Reference in New Issue
Block a user