用户敏感信息接口返回脱敏

使用场景

对用户的敏感信息(比如身份证、电话号码等)做隐藏化返回处理

手机号序列化器

1️⃣在src/main/java/.../common/serialize路径下新建手机号序列化器类
⭐用到的是Hutool工具包里的DesensitizedUtil工具类的mobilePhone方法来实现手机号的脱敏展示
⤵️Hutool脱敏工具类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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 phoneDesensitization = DesensitizedUtil.mobilePhone(phone);
jsonGenerator.writeString(phoneDesensitization);
}
}

2️⃣在对应的DTO对象字段上面加上@JsonSerialize注解
这里以src/main/java/…/dto/resp路径下的UserRespDTO为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
* 用户返回参数响应
*/
@Data
public class UserRespDTO {

/**
* id
*/
private Long id;

/**
* 用户名
*/
private String username;

/**
* 真实姓名
*/
private String realName;

/**
* 手机号
*/
@JsonSerialize(using = PhoneDesensitizationSerializer.class)
private String phone;

/**
* 邮箱
*/
private String mail;

/**
* 注销时间戳
*/
private Long deletionTime;

/**
* 创建时间
*/
private Date createTime;

/**
* 修改时间
*/
private Date updateTime;

/**
* 删除标识 0:未删除 1:已删除
*/
private Integer delFlag;
}

新需求:必须展示无脱敏的信息
解决思路:新建一个无脱敏展示的接口
具体做法:复制一份相同的脱敏接口和返回的DTO对象,将DTO对象相应字段的@JsonSerialize注解删掉即可
Hutool还提供了BeanUtil.toBean 方法,用于map转bean