当前位置: 首页 > news >正文

Spring Boot 优雅进行数据脱敏

文详细解析在Spring Boot应用中优雅地脱敏敏感信息,如手机号、邮箱、身份证等,使用的是Jackson库中的JsonSerializer

1. 创建自定义脱敏序列化器

首先,创建一个继承自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错误*/@Overridepublic 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用于检查数据的合法性。

2. 使用自定义序列化器

在实体类中,使用@JsonSerialize注解指定字段使用自定义序列化器。例如,对于一个用户的手机号,我们在实体类中如下使用:

/*** <p>* 实体类* </p>** @author snogzixian* @since 2023-09-24*/
public class User {@JsonSerialize(using = MobileSerializer.class)private String mobile;// 其他字段和getter、setter
}

3. 扩展性 - 支持多类型数据脱敏

为支持多类型数据(如邮箱、身份证等)脱敏,你可以为每种数据类型创建对应的序列化器类,类似于MobileSerializer

例如,创建一个EmailSerializer处理邮箱脱敏:

public class EmailSerializer extends JsonSerializer<String> {// 实现邮箱的脱敏逻辑
}

在实体类中,对应字段使用@JsonSerialize注解指定使用EmailSerializer

public class User {@JsonSerialize(using = EmailSerializer.class)private String email;// 其他字段和getter、setter
}

http://www.lryc.cn/news/381952.html

相关文章:

  • Vue3 条件语句
  • 小白想要快速学好office办公软件,主要学习以下几个方面?
  • 【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结
  • 爱迪特两年创业板上市路:销售费用率远高同行,侵权风险引关注
  • SQLite 与 Python:集成与使用
  • 【vue scrollTo 数据无限滚动 】
  • MinIO在Linux环境中的使用
  • 免费内网穿透工具 ,快解析内网穿透解决方案
  • 踩坑——VS添加相对路径
  • HTML【介绍】
  • 网络安全:Web 安全 面试题.(XSS)
  • Ubuntu网络管理命令:netstat
  • CV预测:快速使用DenseNet神经网络
  • 竞赛选题 python 机器视觉 车牌识别 - opencv 深度学习 机器学习
  • zerotier-one自建根服务器方法二
  • 【论文通读】SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents
  • Ubuntu20.04离线安装Docker
  • AI大模型战争:通用与垂直,谁将领跑未来?
  • 计算机网络之TCP的三次握手和四次挥手
  • JupyterLab使用指南(八):更改JupterLab左侧默认打开目录
  • Android SurfaceFlinger——HWC Adapter初始化(五)
  • 泛微开发修炼之旅--17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例
  • SpringMVC系列二: 请求方式介绍
  • 大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展
  • C# 关于通讯观察线程(1) -- 开启通讯线程
  • 15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)
  • 【服务器07】之【GitHub项目管理】及【Unity异步加载场景】
  • ansible提权之become_method与become_flags详解
  • elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决
  • 基于图扑 HT for Web 实现拓扑关系图