Browse Source

修复脱敏不生效问题(IIPBZR)

RuoYi 2 tháng trước cách đây
mục cha
commit
58f3c43c50

+ 1 - 1
ruoyi-common/pom.xml

@@ -55,7 +55,7 @@
   
         <!-- JSON工具类 -->
         <dependency>
-            <groupId>com.fasterxml.jackson.core</groupId>
+            <groupId>tools.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
         

+ 2 - 2
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java

@@ -5,7 +5,7 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import tools.jackson.databind.annotation.JsonSerialize;
 import com.ruoyi.common.config.serializer.SensitiveJsonSerializer;
 import com.ruoyi.common.enums.DesensitizedType;
 
@@ -15,7 +15,7 @@ import com.ruoyi.common.enums.DesensitizedType;
  * @author ruoyi
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.FIELD)
+@Target({ ElementType.FIELD, ElementType.METHOD })
 @JacksonAnnotationsInside
 @JsonSerialize(using = SensitiveJsonSerializer.class)
 public @interface Sensitive

+ 26 - 16
ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java

@@ -1,13 +1,13 @@
 package com.ruoyi.common.config.serializer;
 
-import java.io.IOException;
 import java.util.Objects;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.BeanProperty;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.ser.ContextualSerializer;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.databind.BeanProperty;
+import tools.jackson.databind.DatabindException;
+import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.ser.std.StdSerializer;
 import com.ruoyi.common.annotation.Sensitive;
 import com.ruoyi.common.core.domain.model.LoginUser;
 import com.ruoyi.common.enums.DesensitizedType;
@@ -18,14 +18,26 @@ import com.ruoyi.common.utils.SecurityUtils;
  *
  * @author ruoyi
  */
-public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer
+public class SensitiveJsonSerializer extends StdSerializer<String>
 {
-    private DesensitizedType desensitizedType;
+    private final DesensitizedType desensitizedType;
+
+    public SensitiveJsonSerializer()
+    {
+        super(String.class);
+        this.desensitizedType = null;
+    }
+
+    public SensitiveJsonSerializer(DesensitizedType desensitizedType)
+    {
+        super(String.class);
+        this.desensitizedType = desensitizedType;
+    }
 
     @Override
-    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException
+    public void serialize(String value, JsonGenerator gen, SerializationContext ctxt) throws JacksonException
     {
-        if (desensitization())
+        if (desensitizedType != null && desensitization())
         {
             gen.writeString(desensitizedType.desensitizer().apply(value));
         }
@@ -36,16 +48,14 @@ public class SensitiveJsonSerializer extends JsonSerializer<String> implements C
     }
 
     @Override
-    public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
-            throws JsonMappingException
+    public ValueSerializer<?> createContextual(SerializationContext ctxt, BeanProperty property) throws DatabindException
     {
         Sensitive annotation = property.getAnnotation(Sensitive.class);
         if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass()))
         {
-            this.desensitizedType = annotation.desensitizedType();
-            return this;
+            return new SensitiveJsonSerializer(annotation.desensitizedType());
         }
-        return prov.findValueSerializer(property.getType(), property);
+        return ctxt.findValueSerializer(property.getType());
     }
 
     /**