使用场景
对用户的敏感信息(比如身份证、电话号码等)做隐藏化返回处理
手机号序列化器
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