数据脱敏
首先,要思考一个问题,SpringBoot 查询到的一条数据是一个 Java 对象,为什么返回给前端时候,前端拿到的却是 JSON 格式的数据呢?
是因为 SpringBoot 默认采用了 Jackson 作为序列化器,而 Jackson 序列化框架会自动把 Java 对象转换成 JSON 格式的数据,然后返回。
通过这个思路,就可以得到一个方案,就是在 JSON 序列化这个层面,去解决这个问题,从而对数据进行脱敏。
1. 自定义一个 Jackson 序列化器
java">public class IdNumberJsonSerializer extends JsonSerializer<String> {/*** 举例:身份证号脱敏处理** @return: String 脱敏后的结果* @param: value 需要被序列化的字符串对象* @param: jsonGenerator Json 生成器对象,用于生成 JSON 字符串* @param: serializerProvider 序列化提供者,用于提供序列化相关的上下文信息*/@Overridepublic 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();}
}
这里以身份证号进行举例
2. 把自定义序列化器应用到对应字段
在需要脱敏的字段上添加 @JsonSerialize
注解
java">public class User {/** 姓名 */private String name;/** 年龄 */private int age;/** 身份证号 */@JsonSerialize(using = IdNumberJsonSerializer.class)private String idCard;}
优点:使用灵活方便