​ 针对用户中的一些敏感信息,不能不展示,因为有时候需要用到这些数据,但又不能完全展示,因为可能会暴露用户的隐私(比如手机号,身份证号等信息),因此需要对这些数据进行脱敏处理,即只展示数据的部分信息,其余部分用特殊字符表示。

​ 本项目中使用的是自定义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;

image-20240308215714626

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