diff --git a/pom.xml b/pom.xml index 3433458..a202be4 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 2.3.2 2.1.4 1.3.1 - 1.2.78 + 2.0.43 5.8.0 5.8.0 2.11.0 diff --git a/ruoyi-admin/src/test/java/com/fjp/lc/test/common/CommonTest.java b/ruoyi-admin/src/test/java/com/fjp/lc/test/common/CommonTest.java index fd6d4c8..1d2b384 100644 --- a/ruoyi-admin/src/test/java/com/fjp/lc/test/common/CommonTest.java +++ b/ruoyi-admin/src/test/java/com/fjp/lc/test/common/CommonTest.java @@ -14,12 +14,8 @@ import org.springframework.web.client.RestTemplate; import java.io.File; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.security.Timestamp; import java.time.Instant; -import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -36,6 +32,21 @@ public class CommonTest { log.info("end {}", System.currentTimeMillis() - start); }*/ + @Test + public void testEquals(){ + Integer num1 = 100; + Integer num2 = 100; + + System.out.println(num1 == num2); // true,因为对于 Integer 类型,-128 到 127 之间的值会被缓存 + System.out.println(num1.equals(num2)); // true,因为它们的值相同 + + Integer num3 = 200; + Integer num4 = 200; + + System.out.println(num3 == num4); // false,因为超出了缓存范围,会创建新的对象实例 + System.out.println(num3.equals(num4)); // true,因为它们的值相同 + } + @Test public void test4() throws IOException { String f1 = "D:/build/tt.jpg"; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 96727be..8330134 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -255,4 +255,10 @@ public class Constants public static final Integer REFUSE = 2; public static final Integer GIVING = 3; } + + /** + * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全) + */ + public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi","com.cyl" }; + } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java index 59812ea..b87e452 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java @@ -1,34 +1,27 @@ package com.ruoyi.framework.config; -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 com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.filter.Filter; +import com.ruoyi.common.constant.Constants; 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; /** * Redis使用FastJson序列化 - * + * * @author ruoyi */ 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 final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); - static - { - ParserConfig.getGlobalInstance().setAutoTypeSupport(true); - } + private Class clazz; public FastJson2JsonRedisSerializer(Class clazz) { @@ -43,7 +36,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 +48,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, AUTO_TYPE_FILTER); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java index 833f219..151be1b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -8,15 +8,10 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; 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配置 - * + * * @author ruoyi */ @Configuration @@ -32,11 +27,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);