update 优化冗余分隔符
This commit is contained in:
+2
@@ -23,6 +23,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
|
|||||||
|
|
||||||
public static final String SLASH = "/";
|
public static final String SLASH = "/";
|
||||||
|
|
||||||
|
public static final String COLON = ":";
|
||||||
|
|
||||||
private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher();
|
private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher();
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
|
|||||||
+3
-3
@@ -112,13 +112,13 @@ public class RateLimiterAspect {
|
|||||||
key = expression.getValue(context, String.class);
|
key = expression.getValue(context, String.class);
|
||||||
}
|
}
|
||||||
StringBuilder stringBuffer = new StringBuilder(GlobalConstants.RATE_LIMIT_KEY);
|
StringBuilder stringBuffer = new StringBuilder(GlobalConstants.RATE_LIMIT_KEY);
|
||||||
stringBuffer.append(ServletUtils.getRequest().getRequestURI()).append(":");
|
stringBuffer.append(ServletUtils.getRequest().getRequestURI()).append(StringUtils.COLON);
|
||||||
if (rateLimiter.limitType() == LimitType.IP) {
|
if (rateLimiter.limitType() == LimitType.IP) {
|
||||||
// 获取请求ip
|
// 获取请求ip
|
||||||
stringBuffer.append(ServletUtils.getClientIP()).append(":");
|
stringBuffer.append(ServletUtils.getClientIP()).append(StringUtils.COLON);
|
||||||
} else if (rateLimiter.limitType() == LimitType.CLUSTER) {
|
} else if (rateLimiter.limitType() == LimitType.CLUSTER) {
|
||||||
// 获取客户端实例id
|
// 获取客户端实例id
|
||||||
stringBuffer.append(RedisUtils.getClient().getId()).append(":");
|
stringBuffer.append(RedisUtils.getClient().getId()).append(StringUtils.COLON);
|
||||||
}
|
}
|
||||||
return stringBuffer.append(key).toString();
|
return stringBuffer.append(key).toString();
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ public class RepeatSubmitAspect {
|
|||||||
// 唯一值(没有消息头则使用请求地址)
|
// 唯一值(没有消息头则使用请求地址)
|
||||||
String submitKey = StringUtils.trimToEmpty(request.getHeader(SaManager.getConfig().getTokenName()));
|
String submitKey = StringUtils.trimToEmpty(request.getHeader(SaManager.getConfig().getTokenName()));
|
||||||
|
|
||||||
submitKey = SecureUtil.md5(submitKey + ":" + nowParams);
|
submitKey = SecureUtil.md5(submitKey + StringUtils.COLON + nowParams);
|
||||||
// 唯一标识(指定key + url + 消息头)
|
// 唯一标识(指定key + url + 消息头)
|
||||||
String cacheRepeatKey = GlobalConstants.REPEAT_SUBMIT_KEY + url + submitKey;
|
String cacheRepeatKey = GlobalConstants.REPEAT_SUBMIT_KEY + url + submitKey;
|
||||||
if (RedisUtils.setObjectIfAbsent(cacheRepeatKey, "", Duration.ofMillis(interval))) {
|
if (RedisUtils.setObjectIfAbsent(cacheRepeatKey, "", Duration.ofMillis(interval))) {
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ public class KeyPrefixHandler implements NameMapper {
|
|||||||
*/
|
*/
|
||||||
public KeyPrefixHandler(String keyPrefix) {
|
public KeyPrefixHandler(String keyPrefix) {
|
||||||
//前缀为空 则返回空前缀
|
//前缀为空 则返回空前缀
|
||||||
this.keyPrefix = StringUtils.isBlank(keyPrefix) ? "" : keyPrefix + ":";
|
this.keyPrefix = StringUtils.isBlank(keyPrefix) ? "" : keyPrefix + StringUtils.COLON;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+3
-2
@@ -1,5 +1,6 @@
|
|||||||
package org.dromara.common.redis.manager;
|
package org.dromara.common.redis.manager;
|
||||||
|
|
||||||
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.springframework.cache.Cache;
|
import org.springframework.cache.Cache;
|
||||||
|
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
@@ -55,7 +56,7 @@ public class CaffeineCacheDecorator implements Cache {
|
|||||||
* @return 唯一键
|
* @return 唯一键
|
||||||
*/
|
*/
|
||||||
public String getUniqueKey(Object key) {
|
public String getUniqueKey(Object key) {
|
||||||
return name + ":" + key;
|
return name + StringUtils.COLON + key;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -175,7 +176,7 @@ public class CaffeineCacheDecorator implements Cache {
|
|||||||
* 清理当前缓存命名空间下的本地一级缓存。
|
* 清理当前缓存命名空间下的本地一级缓存。
|
||||||
*/
|
*/
|
||||||
private void clearLocalCache() {
|
private void clearLocalCache() {
|
||||||
String prefix = name + ":";
|
String prefix = name + StringUtils.COLON;
|
||||||
caffeine.asMap().keySet().removeIf(key -> key instanceof String cacheKey && cacheKey.startsWith(prefix));
|
caffeine.asMap().keySet().removeIf(key -> key instanceof String cacheKey && cacheKey.startsWith(prefix));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -4,6 +4,7 @@ import cn.dev33.satoken.dao.auto.SaTokenDaoBySessionFollowObject;
|
|||||||
import cn.dev33.satoken.util.SaFoxUtil;
|
import cn.dev33.satoken.util.SaFoxUtil;
|
||||||
import com.github.benmanes.caffeine.cache.Cache;
|
import com.github.benmanes.caffeine.cache.Cache;
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.redis.utils.RedisUtils;
|
import org.dromara.common.redis.utils.RedisUtils;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
@@ -157,7 +158,7 @@ public class PlusSaTokenDao implements SaTokenDaoBySessionFollowObject {
|
|||||||
@Override
|
@Override
|
||||||
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
|
public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
|
||||||
String pattern = prefix + "*" + keyword + "*";
|
String pattern = prefix + "*" + keyword + "*";
|
||||||
String cacheKey = pattern + start + ":" + size + ":" + sortType;
|
String cacheKey = pattern + start + StringUtils.COLON + size + StringUtils.COLON + sortType;
|
||||||
return (List<String>) CAFFEINE.get(cacheKey, k -> {
|
return (List<String>) CAFFEINE.get(cacheKey, k -> {
|
||||||
Collection<String> keys = RedisUtils.keys(pattern);
|
Collection<String> keys = RedisUtils.keys(pattern);
|
||||||
List<String> list = new ArrayList<>(keys);
|
List<String> list = new ArrayList<>(keys);
|
||||||
|
|||||||
+1
-1
@@ -130,7 +130,7 @@ public class SecurityConfig implements WebMvcConfigurer {
|
|||||||
return new SaServletFilter()
|
return new SaServletFilter()
|
||||||
.addInclude("/actuator", "/actuator/**")
|
.addInclude("/actuator", "/actuator/**")
|
||||||
.setAuth(obj -> {
|
.setAuth(obj -> {
|
||||||
SaHttpBasicUtil.check(username + ":" + password);
|
SaHttpBasicUtil.check(username + StringUtils.COLON + password);
|
||||||
})
|
})
|
||||||
.setError(e -> {
|
.setError(e -> {
|
||||||
HttpServletResponse response = ServletUtils.getResponse();
|
HttpServletResponse response = ServletUtils.getResponse();
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ public class SysUserOnlineController extends BaseController {
|
|||||||
// 获取所有未过期的 token
|
// 获取所有未过期的 token
|
||||||
Collection<String> keys = RedisUtils.keys(CacheNames.ONLINE_TOKEN_KEY + "*");
|
Collection<String> keys = RedisUtils.keys(CacheNames.ONLINE_TOKEN_KEY + "*");
|
||||||
List<Supplier<UserOnlineDTO>> suppliers = keys.stream().map(key -> (Supplier<UserOnlineDTO>) () -> {
|
List<Supplier<UserOnlineDTO>> suppliers = keys.stream().map(key -> (Supplier<UserOnlineDTO>) () -> {
|
||||||
String token = StringUtils.substringAfterLast(key, ":");
|
String token = StringUtils.substringAfterLast(key, StringUtils.COLON);
|
||||||
// 如果已经过期则跳过
|
// 如果已经过期则跳过
|
||||||
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
|
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import org.dromara.common.core.constant.SystemConstants;
|
|||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -24,6 +25,8 @@ import java.util.List;
|
|||||||
@TableName("sys_menu")
|
@TableName("sys_menu")
|
||||||
public class SysMenu extends BaseEntity {
|
public class SysMenu extends BaseEntity {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 6967394714839655267L;
|
||||||
/**
|
/**
|
||||||
* 菜单ID
|
* 菜单ID
|
||||||
*/
|
*/
|
||||||
@@ -195,7 +198,7 @@ public class SysMenu extends BaseEntity {
|
|||||||
* 内链域名特殊字符替换
|
* 内链域名特殊字符替换
|
||||||
*/
|
*/
|
||||||
public static String innerLinkReplaceEach(String path) {
|
public static String innerLinkReplaceEach(String path) {
|
||||||
return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"},
|
return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", StringUtils.COLON},
|
||||||
new String[]{"", "", "", "/", "/"});
|
new String[]{"", "", "", "/", "/"});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -546,7 +546,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
|
|||||||
}
|
}
|
||||||
// 角色关联的在线用户量过大会导致redis阻塞卡顿 谨慎操作
|
// 角色关联的在线用户量过大会导致redis阻塞卡顿 谨慎操作
|
||||||
keys.parallelStream().forEach(key -> {
|
keys.parallelStream().forEach(key -> {
|
||||||
String token = StringUtils.substringAfterLast(key, ":");
|
String token = StringUtils.substringAfterLast(key, StringUtils.COLON);
|
||||||
// 如果已经过期则跳过
|
// 如果已经过期则跳过
|
||||||
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
|
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
|
||||||
return;
|
return;
|
||||||
@@ -582,7 +582,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
|
|||||||
}
|
}
|
||||||
// 角色关联的在线用户量过大会导致redis阻塞卡顿 谨慎操作
|
// 角色关联的在线用户量过大会导致redis阻塞卡顿 谨慎操作
|
||||||
keys.parallelStream().forEach(key -> {
|
keys.parallelStream().forEach(key -> {
|
||||||
String token = StringUtils.substringAfterLast(key, ":");
|
String token = StringUtils.substringAfterLast(key, StringUtils.COLON);
|
||||||
// 如果已经过期则跳过
|
// 如果已经过期则跳过
|
||||||
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
|
if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(token) < -1) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
+1
-6
@@ -34,7 +34,6 @@ import org.dromara.workflow.service.IFlwNodeExtService;
|
|||||||
import org.dromara.workflow.service.IFlwTaskService;
|
import org.dromara.workflow.service.IFlwTaskService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.io.Serial;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -51,10 +50,6 @@ import java.util.Set;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class WorkflowGlobalListener implements GlobalListener {
|
public class WorkflowGlobalListener implements GlobalListener {
|
||||||
|
|
||||||
private static final String NODE_KEY_SEPARATOR = ":";
|
|
||||||
@Serial
|
|
||||||
private static final long serialVersionUID = -5133036757491932497L;
|
|
||||||
|
|
||||||
private final IFlwTaskService flwTaskService;
|
private final IFlwTaskService flwTaskService;
|
||||||
private final IFlwInstanceService flwInstanceService;
|
private final IFlwInstanceService flwInstanceService;
|
||||||
private final FlowProcessEventHandler flowProcessEventHandler;
|
private final FlowProcessEventHandler flowProcessEventHandler;
|
||||||
@@ -145,7 +140,7 @@ public class WorkflowGlobalListener implements GlobalListener {
|
|||||||
* @param taskStatus 任务状态
|
* @param taskStatus 任务状态
|
||||||
*/
|
*/
|
||||||
private void processTaskPermission(Map<String, Object> variable, Task flowTask, String taskStatus) {
|
private void processTaskPermission(Map<String, Object> variable, Task flowTask, String taskStatus) {
|
||||||
String nodeKey = taskStatus + NODE_KEY_SEPARATOR + flowTask.getNodeCode();
|
String nodeKey = taskStatus + StringUtils.COLON + flowTask.getNodeCode();
|
||||||
|
|
||||||
// 检查是否存在状态相关的变量
|
// 检查是否存在状态相关的变量
|
||||||
if (!variable.containsKey(nodeKey)) {
|
if (!variable.containsKey(nodeKey)) {
|
||||||
|
|||||||
+2
-3
@@ -42,7 +42,6 @@ import java.util.stream.Collectors;
|
|||||||
public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, HandlerSelectService {
|
public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, HandlerSelectService {
|
||||||
|
|
||||||
private static final String DEFAULT_GROUP_NAME = "默认分组";
|
private static final String DEFAULT_GROUP_NAME = "默认分组";
|
||||||
private static final String STORAGE_ID_SEPARATOR = ":";
|
|
||||||
|
|
||||||
private final TaskAssigneeService taskAssigneeService;
|
private final TaskAssigneeService taskAssigneeService;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
@@ -313,11 +312,11 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
|
|||||||
return Pair.of(TaskAssigneeEnum.SPEL, storageId);
|
return Pair.of(TaskAssigneeEnum.SPEL, storageId);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
String[] parts = storageId.split(STORAGE_ID_SEPARATOR, 2);
|
String[] parts = storageId.split(StringUtils.COLON, 2);
|
||||||
if (parts.length < 2) {
|
if (parts.length < 2) {
|
||||||
return Pair.of(TaskAssigneeEnum.USER, parts[0]);
|
return Pair.of(TaskAssigneeEnum.USER, parts[0]);
|
||||||
} else {
|
} else {
|
||||||
TaskAssigneeEnum type = TaskAssigneeEnum.fromCode(parts[0] + STORAGE_ID_SEPARATOR);
|
TaskAssigneeEnum type = TaskAssigneeEnum.fromCode(parts[0] + StringUtils.COLON);
|
||||||
return Pair.of(type, parts[1]);
|
return Pair.of(type, parts[1]);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|||||||
+5
-7
@@ -22,8 +22,8 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|||||||
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
import org.dromara.common.mybatis.core.query.QueryBuilder;
|
||||||
import org.dromara.common.mybatis.utils.IdGeneratorUtil;
|
import org.dromara.common.mybatis.utils.IdGeneratorUtil;
|
||||||
import org.dromara.common.satoken.utils.LoginHelper;
|
import org.dromara.common.satoken.utils.LoginHelper;
|
||||||
import org.dromara.system.api.domain.UserDTO;
|
|
||||||
import org.dromara.system.api.UserService;
|
import org.dromara.system.api.UserService;
|
||||||
|
import org.dromara.system.api.domain.UserDTO;
|
||||||
import org.dromara.warm.flow.core.FlowEngine;
|
import org.dromara.warm.flow.core.FlowEngine;
|
||||||
import org.dromara.warm.flow.core.dto.FlowParams;
|
import org.dromara.warm.flow.core.dto.FlowParams;
|
||||||
import org.dromara.warm.flow.core.entity.*;
|
import org.dromara.warm.flow.core.entity.*;
|
||||||
@@ -76,8 +76,6 @@ import static org.dromara.workflow.common.constant.FlowConstant.*;
|
|||||||
@Service
|
@Service
|
||||||
public class FlwTaskServiceImpl implements IFlwTaskService {
|
public class FlwTaskServiceImpl implements IFlwTaskService {
|
||||||
|
|
||||||
private static final String NODE_KEY_SEPARATOR = ":";
|
|
||||||
|
|
||||||
private final TaskService taskService;
|
private final TaskService taskService;
|
||||||
private final InsService insService;
|
private final InsService insService;
|
||||||
private final DefService defService;
|
private final DefService defService;
|
||||||
@@ -317,12 +315,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
|
|||||||
List<String> variableUserIds = StringUtils.str2List(userIds, StringUtils.SEPARATOR, true, true);
|
List<String> variableUserIds = StringUtils.str2List(userIds, StringUtils.SEPARATOR, true, true);
|
||||||
hashSet.addAll(popUserIds);
|
hashSet.addAll(popUserIds);
|
||||||
hashSet.addAll(variableUserIds);
|
hashSet.addAll(variableUserIds);
|
||||||
map.put(TaskStatusEnum.PASS.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), StringUtils.joinComma(hashSet));
|
map.put(TaskStatusEnum.PASS.getStatus() + StringUtils.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||||
map.put(TaskStatusEnum.BACK.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), StringUtils.joinComma(hashSet));
|
map.put(TaskStatusEnum.BACK.getStatus() + StringUtils.COLON + entry.getKey(), StringUtils.joinComma(hashSet));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
map.put(TaskStatusEnum.PASS.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), entry.getValue());
|
map.put(TaskStatusEnum.PASS.getStatus() + StringUtils.COLON + entry.getKey(), entry.getValue());
|
||||||
map.put(TaskStatusEnum.BACK.getStatus() + NODE_KEY_SEPARATOR + entry.getKey(), entry.getValue());
|
map.put(TaskStatusEnum.BACK.getStatus() + StringUtils.COLON + entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
|
|||||||
Reference in New Issue
Block a user