针对用户中的一些敏感信息,不能不展示,因为有时候需要用到这些数据,但又不能完全展示,因为可能会暴露用户的隐私(比如手机号,身份证号等信息),因此需要对这些数据进行脱敏处理,即只展示数据的部分信息,其余部分用特殊字符表示。
本项目中使用的是自定义Json序列化的方式,在SpringMVC中当用户信息返回给浏览器时默认会使用Jackson进行序列化,我们只需要改变此处的序列化方式就能达到给用户信息脱敏的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package com.deng.shortlink.admin.util;
import cn.hutool.core.util.DesensitizedUtil; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
public class PhoneDesensitizationSerializer extends JsonSerializer<String> { @Override public void serialize(String phone, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { String safePhone = DesensitizedUtil.mobilePhone(phone); jsonGenerator.writeString(safePhone); } }
|
只要在需要脱敏的字段上使用@JsonSerialize注解并指明序列化器即可
1 2
| @JsonSerialize(using = PhoneDesensitizationSerializer.class) private String phone;
|

可以发现,用户的手机号码的信息成功进行了脱敏处理。