目录

Java-中数据脱敏的实现

Java 中数据脱敏的实现

首先,要思考一个问题,SpringBoot 查询到的一条数据是一个 Java 对象,为什么返回给前端时候,前端拿到的却是 JSON 格式的数据呢?

是因为 SpringBoot 默认采用了 Jackson 作为序列化器,而 Jackson 序列化框架会自动把 Java 对象转换成 JSON 格式的数据,然后返回。

通过这个思路,就可以得到一个方案,就是在 JSON 序列化这个层面,去解决这个问题,从而对数据进行脱敏。

public class IdNumberJsonSerializer extends JsonSerializer<String> {

  /**
	 * 举例:身份证号脱敏处理
	 *
	 * @return: String 脱敏后的结果
	 * @param: value 需要被序列化的字符串对象
	 * @param: jsonGenerator Json 生成器对象,用于生成 JSON 字符串
	 * @param: serializerProvider 序列化提供者,用于提供序列化相关的上下文信息
	 */
  @Override
  public void serialize(
    String value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider
  ) throws IOException {
    if(value != null) {
      value = value.replaceAll("(\\d{6})\\d{10}(\\w{2})", "$1********$2");
      jsonGenerator.writeString(value);
      return;
    }
    jsonGenerator.writeNull();
  }
}

这里以身份证号进行举例

在需要脱敏的字段上添加 @JsonSerialize 注解

public class User {

  /** 姓名 */
  private String name;

  /** 年龄 */
  private int age;

  /** 身份证号 */
  @JsonSerialize(using = IdNumberJsonSerializer.class)
  private String idCard;

}

优点:使用灵活方便