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

This commit is contained in:
RuoYi
2026-04-15 13:03:51 +08:00
parent d454d9729e
commit 58f3c43c50
3 changed files with 29 additions and 19 deletions
+1 -1
View File
@@ -55,7 +55,7 @@
<!-- JSON工具类 --> <!-- JSON工具类 -->
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
</dependency> </dependency>
@@ -5,7 +5,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; 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.config.serializer.SensitiveJsonSerializer;
import com.ruoyi.common.enums.DesensitizedType; import com.ruoyi.common.enums.DesensitizedType;
@@ -15,7 +15,7 @@ import com.ruoyi.common.enums.DesensitizedType;
* @author ruoyi * @author ruoyi
*/ */
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target({ ElementType.FIELD, ElementType.METHOD })
@JacksonAnnotationsInside @JacksonAnnotationsInside
@JsonSerialize(using = SensitiveJsonSerializer.class) @JsonSerialize(using = SensitiveJsonSerializer.class)
public @interface Sensitive public @interface Sensitive
@@ -1,13 +1,13 @@
package com.ruoyi.common.config.serializer; package com.ruoyi.common.config.serializer;
import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import com.fasterxml.jackson.core.JsonGenerator; import tools.jackson.core.JacksonException;
import com.fasterxml.jackson.databind.BeanProperty; import tools.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonMappingException; import tools.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonSerializer; import tools.jackson.databind.DatabindException;
import com.fasterxml.jackson.databind.SerializerProvider; import tools.jackson.databind.SerializationContext;
import com.fasterxml.jackson.databind.ser.ContextualSerializer; import tools.jackson.databind.ValueSerializer;
import tools.jackson.databind.ser.std.StdSerializer;
import com.ruoyi.common.annotation.Sensitive; import com.ruoyi.common.annotation.Sensitive;
import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.DesensitizedType; import com.ruoyi.common.enums.DesensitizedType;
@@ -18,14 +18,26 @@ import com.ruoyi.common.utils.SecurityUtils;
* *
* @author ruoyi * @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 @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)); gen.writeString(desensitizedType.desensitizer().apply(value));
} }
@@ -36,16 +48,14 @@ public class SensitiveJsonSerializer extends JsonSerializer<String> implements C
} }
@Override @Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) public ValueSerializer<?> createContextual(SerializationContext ctxt, BeanProperty property) throws DatabindException
throws JsonMappingException
{ {
Sensitive annotation = property.getAnnotation(Sensitive.class); Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass()))
{ {
this.desensitizedType = annotation.desensitizedType(); return new SensitiveJsonSerializer(annotation.desensitizedType());
return this;
} }
return prov.findValueSerializer(property.getType(), property); return ctxt.findValueSerializer(property.getType());
} }
/** /**