赞
踩
文详细解析在Spring Boot应用中优雅地脱敏敏感信息,如手机号、邮箱、身份证等,使用的是Jackson库中的JsonSerializer
。
首先,创建一个继承自JsonSerializer<String>
的序列化器。以MobileSerializer
为例,代码如下:
- 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;
-
- /**
- * <p>
- * 自定义手机序列号器
- * </p>
- *
- * @author snogzixian
- * @since 2023-09-24
- */
- public class MobileSerializer extends JsonSerializer<String> {
-
- /**
- * 自定义序列化方法,用于对手机号进行脱敏处理并写入JSON生成器。
- *
- * @param mobile 要序列化的手机号
- * @param jsonGenerator JSON生成器,用于写入序列化后的数据
- * @param serializerProvider 序列化提供者,提供序列化所需的服务
- * @throws IOException 如果在序列化过程中发生I/O错误
- */
- @Override
- public void serialize(String mobile, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
- // 检查手机号是否为null或者是否是有效的手机号
- if (mobile == null || !isValidMobile(mobile)) {
- // 如果手机号无效,直接输出原始手机号
- jsonGenerator.writeString(mobile);
- return;
- }
- // 调用脱敏工具类对手机号进行脱敏处理
- String mobileDesensitized = DesensitizedUtil.mobilePhone(mobile);
- // 将脱敏后的手机号字符串写入到JSON生成器jsonGenerator中
- jsonGenerator.writeString(mobileDesensitized);
- }
-
- /**
- * 检查手机号的合法性
- *
- * @param mobile 手机号
- * @return 如果手机号合法则返回true,否则返回false
- */
- private boolean isValidMobile(String mobile) {
- // 在此处添加对手机号合法性的检查逻辑
- return true;
- }
- }

其中,serialize
方法用于处理数据的脱敏逻辑,isValidMobile
用于检查数据的合法性。
在实体类中,使用@JsonSerialize
注解指定字段使用自定义序列化器。例如,对于一个用户的手机号,我们在实体类中如下使用:
- /**
- * <p>
- * 实体类
- * </p>
- *
- * @author snogzixian
- * @since 2023-09-24
- */
- public class User {
-
- @JsonSerialize(using = MobileSerializer.class)
- private String mobile;
-
- // 其他字段和getter、setter
- }
为支持多类型数据(如邮箱、身份证等)脱敏,你可以为每种数据类型创建对应的序列化器类,类似于MobileSerializer
。
例如,创建一个EmailSerializer
处理邮箱脱敏:
- public class EmailSerializer extends JsonSerializer<String> {
- // 实现邮箱的脱敏逻辑
- }
在实体类中,对应字段使用@JsonSerialize
注解指定使用EmailSerializer
。
- public class User {
-
- @JsonSerialize(using = EmailSerializer.class)
- private String email;
-
- // 其他字段和getter、setter
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。