RE_KEYS = new HashSet<>(
- Arrays.asList('$', '(', ')', '*', '+', '.', '[', ']', '?', '\\', '^', '{', '}', '|'));;
-
- /**
- * 正则替换指定值
- * 通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串
- *
- *
- * 例如:原字符串是:中文1234,我想把1234换成(1234),则可以:
- *
- *
- * ReUtil.replaceAll("中文1234", "(\\d+)", "($1)"))
- *
- * 结果:中文(1234)
- *
- *
- * @param content 文本
- * @param regex 正则
- * @param replacementTemplate 替换的文本模板,可以使用$1类似的变量提取正则匹配出的内容
- * @return 处理后的文本
- */
- public static String replaceAll(CharSequence content, String regex, String replacementTemplate)
- {
- final Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
- return replaceAll(content, pattern, replacementTemplate);
- }
-
- /**
- * 正则替换指定值
- * 通过正则查找到字符串,然后把匹配到的字符串加入到replacementTemplate中,$1表示分组1的字符串
- *
- * @param content 文本
- * @param pattern {@link Pattern}
- * @param replacementTemplate 替换的文本模板,可以使用$1类似的变量提取正则匹配出的内容
- * @return 处理后的文本
- * @since 3.0.4
- */
- public static String replaceAll(CharSequence content, Pattern pattern, String replacementTemplate)
- {
- if (StringUtils.isEmpty(content))
- {
- return StringUtils.EMPTY;
- }
-
- final Matcher matcher = pattern.matcher(content);
- boolean result = matcher.find();
- if (result)
- {
- final Set varNums = findAll(GROUP_VAR, replacementTemplate, 1, new HashSet<>());
- final StringBuffer sb = new StringBuffer();
- do
- {
- String replacement = replacementTemplate;
- for (String var : varNums)
- {
- int group = Integer.parseInt(var);
- replacement = replacement.replace("$" + var, matcher.group(group));
- }
- matcher.appendReplacement(sb, escape(replacement));
- result = matcher.find();
- }
- while (result);
- matcher.appendTail(sb);
- return sb.toString();
- }
- return Convert.toStr(content);
- }
-
- /**
- * 取得内容中匹配的所有结果
- *
- * @param 集合类型
- * @param pattern 编译后的正则模式
- * @param content 被查找的内容
- * @param group 正则的分组
- * @param collection 返回的集合类型
- * @return 结果集
- */
- public static > T findAll(Pattern pattern, CharSequence content, int group,
- T collection)
- {
- if (null == pattern || null == content)
- {
- return null;
- }
-
- if (null == collection)
- {
- throw new NullPointerException("Null collection param provided!");
- }
-
- final Matcher matcher = pattern.matcher(content);
- while (matcher.find())
- {
- collection.add(matcher.group(group));
- }
- return collection;
- }
-
- /**
- * 转义字符,将正则的关键字转义
- *
- * @param c 字符
- * @return 转义后的文本
- */
- public static String escape(char c)
- {
- final StringBuilder builder = new StringBuilder();
- if (RE_KEYS.contains(c))
- {
- builder.append('\\');
- }
- builder.append(c);
- return builder.toString();
- }
-
- /**
- * 转义字符串,将正则的关键字转义
- *
- * @param content 文本
- * @return 转义后的文本
- */
- public static String escape(CharSequence content)
- {
- if (StringUtils.isBlank(content))
- {
- return StringUtils.EMPTY;
- }
-
- final StringBuilder builder = new StringBuilder();
- int len = content.length();
- char current;
- for (int i = 0; i < len; i++)
- {
- current = content.charAt(i);
- if (RE_KEYS.contains(current))
- {
- builder.append('\\');
- }
- builder.append(current);
- }
- return builder.toString();
- }
-
-}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java
index be2817c9..da36707b 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java
@@ -5,7 +5,6 @@ import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Enumeration;
-import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -15,10 +14,11 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.text.Convert;
@@ -142,7 +142,7 @@ public class ServletUtils
public static Map getHeaders(HttpServletRequest request)
{
- Map map = new LinkedHashMap<>();
+ Map map = new LinkedCaseInsensitiveMap<>();
Enumeration enumeration = request.getHeaderNames();
if (enumeration != null)
{
@@ -296,7 +296,7 @@ public class ServletUtils
response.setStatusCode(status);
response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType);
R> result = R.fail(code, value.toString());
- DataBuffer dataBuffer = response.bufferFactory().wrap(JSONObject.toJSONString(result).getBytes());
+ DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes());
return response.writeWith(Mono.just(dataBuffer));
}
}
diff --git a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
index ad827d15..318d574b 100644
--- a/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
+++ b/ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
@@ -119,7 +119,7 @@ public class DataScopeAspect
else
{
// 数据权限为仅本人且没有userAlias别名不查询任何数据
- sqlString.append(" OR 1=0 ");
+ sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias));
}
}
}
diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
index c7237f15..14178f8f 100644
--- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
+++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
@@ -15,7 +15,7 @@ import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;
-import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.ip.IpUtils;
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java
index 012eeb8e..76fe2751 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java
@@ -1,15 +1,11 @@
package com.ruoyi.common.redis.configure;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.type.TypeFactory;
+import java.nio.charset.Charset;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
-import com.alibaba.fastjson.parser.ParserConfig;
-import org.springframework.util.Assert;
-import java.nio.charset.Charset;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONReader;
+import com.alibaba.fastjson2.JSONWriter;
/**
* Redis使用FastJson序列化
@@ -18,17 +14,10 @@ import java.nio.charset.Charset;
*/
public class FastJson2JsonRedisSerializer implements RedisSerializer
{
- @SuppressWarnings("unused")
- private ObjectMapper objectMapper = new ObjectMapper();
-
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class clazz;
- static
- {
- ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
- }
public FastJson2JsonRedisSerializer(Class clazz)
{
@@ -43,7 +32,7 @@ public class FastJson2JsonRedisSerializer implements RedisSerializer
{
return new byte[0];
}
- return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
+ return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET);
}
@Override
@@ -55,17 +44,6 @@ public class FastJson2JsonRedisSerializer implements RedisSerializer
}
String str = new String(bytes, DEFAULT_CHARSET);
- return JSON.parseObject(str, clazz);
- }
-
- public void setObjectMapper(ObjectMapper objectMapper)
- {
- Assert.notNull(objectMapper, "'objectMapper' must not be null");
- this.objectMapper = objectMapper;
- }
-
- protected JavaType getJavaType(Class> clazz)
- {
- return TypeFactory.defaultInstance().constructType(clazz);
+ return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
}
}
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
index 31238d63..7363c8a4 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
@@ -1,5 +1,7 @@
package com.ruoyi.common.redis.configure;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
@@ -7,11 +9,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
/**
* redis配置
@@ -20,6 +17,7 @@ import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator
*/
@Configuration
@EnableCaching
+@AutoConfigureBefore(RedisAutoConfiguration.class)
public class RedisConfig extends CachingConfigurerSupport
{
@Bean
@@ -31,11 +29,6 @@ public class RedisConfig extends CachingConfigurerSupport
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
- ObjectMapper mapper = new ObjectMapper();
- mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
- mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
- serializer.setObjectMapper(mapper);
-
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
index 9768c6d8..29e52e61 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
@@ -2,6 +2,7 @@ package com.ruoyi.common.security.utils;
import java.util.Collection;
import java.util.List;
+import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.utils.StringUtils;
@@ -34,10 +35,10 @@ public class DictUtils
*/
public static List getDictCache(String key)
{
- Object cacheObj = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
- if (StringUtils.isNotNull(cacheObj))
+ JSONArray arrayCache = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
+ if (StringUtils.isNotNull(arrayCache))
{
- return StringUtils.cast(cacheObj);
+ return arrayCache.toList(SysDictData.class);
}
return null;
}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
index 67f18b7d..72667305 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.support.NameUtils;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.config.ResourceHandlerRegistry;
import org.springframework.web.reactive.config.WebFluxConfigurer;
@@ -24,9 +25,11 @@ public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigu
* Swagger2默认的url后缀
*/
public static final String SWAGGER2URL = "/v2/api-docs";
+
/**
* 网关路由
*/
+ @Lazy
@Autowired
private RouteLocator routeLocator;
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java
index c06376dd..94c6cb56 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java
@@ -6,14 +6,10 @@ import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
-import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.core.io.buffer.DataBufferFactory;
-import org.springframework.core.io.buffer.DataBufferUtils;
+import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.http.HttpMethod;
-import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
/**
@@ -54,30 +50,16 @@ public class CacheRequestFilter extends AbstractGatewayFilterFactory {
- byte[] bytes = new byte[dataBuffer.readableByteCount()];
- dataBuffer.read(bytes);
- DataBufferUtils.release(dataBuffer);
- return bytes;
- }).defaultIfEmpty(new byte[0]).flatMap(bytes -> {
- DataBufferFactory dataBufferFactory = exchange.getResponse().bufferFactory();
- ServerHttpRequestDecorator decorator = new ServerHttpRequestDecorator(exchange.getRequest())
+ return ServerWebExchangeUtils.cacheRequestBodyAndRequest(exchange, (serverHttpRequest) -> {
+ if (serverHttpRequest == exchange.getRequest())
{
- @Override
- public Flux getBody()
- {
- if (bytes.length > 0)
- {
- return Flux.just(dataBufferFactory.wrap(bytes));
- }
- return Flux.empty();
- }
- };
- return chain.filter(exchange.mutate().request(decorator).build());
+ return chain.filter(exchange);
+ }
+ return chain.filter(exchange.mutate().request(serverHttpRequest).build());
});
}
}
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java
index 39fcd15d..93e366ea 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java
@@ -10,7 +10,8 @@ import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.gateway.config.properties.CaptchaProperties;
@@ -52,7 +53,7 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory