| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- package com.ruoyi.common.jackson;
- 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 com.ruoyi.common.annotation.Sensitive;
- import com.ruoyi.common.core.service.SensitiveService;
- import com.ruoyi.common.enums.SensitiveStrategy;
- import com.ruoyi.common.utils.spring.SpringUtils;
- import java.io.IOException;
- import java.util.Objects;
- /**
- * 数据脱敏json序列化工具
- *
- * @author Yjoioooo
- */
- public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {
- private SensitiveStrategy strategy;
- @Override
- public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
- SensitiveService sensitiveService = SpringUtils.getBean(SensitiveService.class);
- if (sensitiveService.isSensitive()) {
- gen.writeString(value);
- } else {
- gen.writeString(strategy.desensitizer().apply(value));
- }
- }
- @Override
- public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
- Sensitive annotation = property.getAnnotation(Sensitive.class);
- if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
- this.strategy = annotation.strategy();
- return this;
- }
- return prov.findValueSerializer(property.getType(), property);
- }
- }
|