当前位置:   article > 正文

Spring Boot 优雅进行数据脱敏_springboot 电话脱敏

springboot 电话脱敏

文详细解析在Spring Boot应用中优雅地脱敏敏感信息,如手机号、邮箱、身份证等,使用的是Jackson库中的JsonSerializer

1. 创建自定义脱敏序列化器

首先,创建一个继承自JsonSerializer<String>的序列化器。以MobileSerializer为例,代码如下:

  1. import cn.hutool.core.util.DesensitizedUtil;
  2. import com.fasterxml.jackson.core.JsonGenerator;
  3. import com.fasterxml.jackson.databind.JsonSerializer;
  4. import com.fasterxml.jackson.databind.SerializerProvider;
  5. import java.io.IOException;
  6. /**
  7. * <p>
  8. * 自定义手机序列号器
  9. * </p>
  10. *
  11. * @author snogzixian
  12. * @since 2023-09-24
  13. */
  14. public class MobileSerializer extends JsonSerializer<String> {
  15. /**
  16. * 自定义序列化方法,用于对手机号进行脱敏处理并写入JSON生成器。
  17. *
  18. * @param mobile 要序列化的手机号
  19. * @param jsonGenerator JSON生成器,用于写入序列化后的数据
  20. * @param serializerProvider 序列化提供者,提供序列化所需的服务
  21. * @throws IOException 如果在序列化过程中发生I/O错误
  22. */
  23. @Override
  24. public void serialize(String mobile, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
  25. // 检查手机号是否为null或者是否是有效的手机号
  26. if (mobile == null || !isValidMobile(mobile)) {
  27. // 如果手机号无效,直接输出原始手机号
  28. jsonGenerator.writeString(mobile);
  29. return;
  30. }
  31. // 调用脱敏工具类对手机号进行脱敏处理
  32. String mobileDesensitized = DesensitizedUtil.mobilePhone(mobile);
  33. // 将脱敏后的手机号字符串写入到JSON生成器jsonGenerator中
  34. jsonGenerator.writeString(mobileDesensitized);
  35. }
  36. /**
  37. * 检查手机号的合法性
  38. *
  39. * @param mobile 手机号
  40. * @return 如果手机号合法则返回true,否则返回false
  41. */
  42. private boolean isValidMobile(String mobile) {
  43. // 在此处添加对手机号合法性的检查逻辑
  44. return true;
  45. }
  46. }

其中,serialize方法用于处理数据的脱敏逻辑,isValidMobile用于检查数据的合法性。

2. 使用自定义序列化器

在实体类中,使用@JsonSerialize注解指定字段使用自定义序列化器。例如,对于一个用户的手机号,我们在实体类中如下使用:

  1. /**
  2. * <p>
  3. * 实体类
  4. * </p>
  5. *
  6. * @author snogzixian
  7. * @since 2023-09-24
  8. */
  9. public class User {
  10. @JsonSerialize(using = MobileSerializer.class)
  11. private String mobile;
  12. // 其他字段和getter、setter
  13. }

3. 扩展性 - 支持多类型数据脱敏

为支持多类型数据(如邮箱、身份证等)脱敏,你可以为每种数据类型创建对应的序列化器类,类似于MobileSerializer

例如,创建一个EmailSerializer处理邮箱脱敏:

  1. public class EmailSerializer extends JsonSerializer<String> {
  2. // 实现邮箱的脱敏逻辑
  3. }

在实体类中,对应字段使用@JsonSerialize注解指定使用EmailSerializer

  1. public class User {
  2. @JsonSerialize(using = EmailSerializer.class)
  3. private String email;
  4. // 其他字段和getter、setter
  5. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/920880?site
推荐阅读
相关标签
  

闽ICP备14008679号