• JAVA 自定义注解,实现数据脱敏处理


    1:自定义注解

    1. /**
    2. * 脱敏注解
    3. **/
    4. @Retention(RetentionPolicy.RUNTIME)
    5. @Target(ElementType.FIELD)
    6. @JacksonAnnotationsInside
    7. @JsonSerialize(using = SensitiveSerialize.class)
    8. public @interface Sensitive {
    9. /**
    10. * 脱敏数据类型
    11. */
    12. SensitiveTypeEnum type();
    13. }

    2:序列化

    1. import com.fasterxml.jackson.core.JsonGenerator;
    2. import com.fasterxml.jackson.databind.BeanProperty;
    3. import com.fasterxml.jackson.databind.JsonMappingException;
    4. import com.fasterxml.jackson.databind.JsonSerializer;
    5. import com.fasterxml.jackson.databind.SerializerProvider;
    6. import com.fasterxml.jackson.databind.ser.ContextualSerializer;
    7. import com.thk.utils.SensitiveUtils;
    8. import lombok.AllArgsConstructor;
    9. import lombok.NoArgsConstructor;
    10. import java.io.IOException;
    11. import java.util.Objects;
    12. /**
    13. * 脱敏序列化
    14. */
    15. @NoArgsConstructor
    16. @AllArgsConstructor
    17. public class SensitiveSerialize extends JsonSerializer implements ContextualSerializer {
    18. private SensitiveTypeEnum type;
    19. @Override
    20. public void serialize(final String originStr, final JsonGenerator jsonGenerator,
    21. final SerializerProvider serializerProvider) throws IOException {
    22. switch (type) {
    23. case CHINESE_NAME:
    24. jsonGenerator.writeString( SensitiveUtils.chineseName(originStr));
    25. break;
    26. case MOBILE_PHONE:
    27. jsonGenerator.writeString(SensitiveUtils.mobilePhone(originStr));
    28. break;
    29. case EMAIL:
    30. jsonGenerator.writeString(SensitiveUtils.email(originStr));
    31. break;
    32. case PASSWORD:
    33. jsonGenerator.writeString(SensitiveUtils.password(originStr));
    34. break;
    35. case KEY:
    36. jsonGenerator.writeString(SensitiveUtils.key(originStr));
    37. break;
    38. default:
    39. throw new IllegalArgumentException("未定义的敏感信息枚举类" + type);
    40. }
    41. }
    42. @Override
    43. public JsonSerializer createContextual(final SerializerProvider serializerProvider, final BeanProperty beanProperty) throws JsonMappingException {
    44. if (beanProperty != null) {
    45. if (Objects.equals(beanProperty.getType().getRawClass(), String.class)) {
    46. Sensitive sensitive = beanProperty.getAnnotation(Sensitive.class);
    47. if (sensitive == null) {
    48. sensitive = beanProperty.getContextAnnotation(Sensitive.class);
    49. }
    50. if (sensitive != null) {
    51. return new SensitiveSerialize(sensitive.type());
    52. }
    53. }
    54. return serializerProvider.findValueSerializer(beanProperty.getType(), beanProperty);
    55. }
    56. return serializerProvider.findNullValueSerializer(null);
    57. }
    58. }

    3:脱敏类型枚举类

    1. public enum SensitiveTypeEnum {
    2. /**
    3. * 用户名, 唐*天, 李*
    4. */
    5. CHINESE_NAME,
    6. /**
    7. * 手机号, 17623****78
    8. */
    9. MOBILE_PHONE,
    10. /**
    11. * 电子邮件, 2423*****8@qq.com
    12. */
    13. EMAIL,
    14. /**
    15. * 密码, ******
    16. */
    17. PASSWORD,
    18. /**
    19. * 密钥最后三位其他都是***
    20. */
    21. KEY
    22. }

    4:使用方法,用在实体类上,对昵称,邮箱,电话,进行脱敏处理

    1. public class People {
    2. private Integer bizCode;
    3. @NotNull(message = "id不能为空")
    4. private Long id;
    5. private String name;
    6. private Integer age;
    7. private String address;
    8. @Sensitive(type = SensitiveTypeEnum.CHINESE_NAME)
    9. private String userName;
    10. private String pwd;
    11. @Sensitive(type = SensitiveTypeEnum.EMAIL)
    12. private String email;
    13. @Sensitive(type = SensitiveTypeEnum.MOBILE_PHONE)
    14. private String phonenumber;
    15. private String sex;
    16. }

    5:postman测试

  • 相关阅读:
    浅谈OpenCV的多对象匹配图像的实现,以及如何匹配半透明控件,不规则图像
    【LayerNorm 2d】 LayerNorm图解, torch代码实现, 用法
    BUUCTF helloword 1
    OA系统都能为企业带来什么
    Compose UI 之 Buttons 按钮 & IconButtons 图标按钮
    项目集成七牛云存储sdk
    多线程回顾、集合Collection、Set、List等基本知识
    关于高速PCB设计的串扰知识,这篇文章讲清楚了
    顺序表的快慢指针应用:leetcode26、27、88、大数加法989(交换数组)
    信贷风控也要学|智能推荐系统的应用
  • 原文地址:https://blog.csdn.net/weixin_58696998/article/details/133710212