SensitiveJsonSerializer.java 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package com.ruoyi.common.jackson;
  2. import com.fasterxml.jackson.core.JsonGenerator;
  3. import com.fasterxml.jackson.databind.BeanProperty;
  4. import com.fasterxml.jackson.databind.JsonMappingException;
  5. import com.fasterxml.jackson.databind.JsonSerializer;
  6. import com.fasterxml.jackson.databind.SerializerProvider;
  7. import com.fasterxml.jackson.databind.ser.ContextualSerializer;
  8. import com.ruoyi.common.annotation.Sensitive;
  9. import com.ruoyi.common.core.service.SensitiveService;
  10. import com.ruoyi.common.enums.SensitiveStrategy;
  11. import com.ruoyi.common.utils.spring.SpringUtils;
  12. import java.io.IOException;
  13. import java.util.Objects;
  14. /**
  15. * 数据脱敏json序列化工具
  16. *
  17. * @author Yjoioooo
  18. */
  19. public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer {
  20. private SensitiveStrategy strategy;
  21. @Override
  22. public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
  23. SensitiveService sensitiveService = SpringUtils.getBean(SensitiveService.class);
  24. if (sensitiveService.isSensitive()) {
  25. gen.writeString(value);
  26. } else {
  27. gen.writeString(strategy.desensitizer().apply(value));
  28. }
  29. }
  30. @Override
  31. public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
  32. Sensitive annotation = property.getAnnotation(Sensitive.class);
  33. if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
  34. this.strategy = annotation.strategy();
  35. return this;
  36. }
  37. return prov.findValueSerializer(property.getType(), property);
  38. }
  39. }