news 2026/6/10 17:43:49

别再手写了!SpringBoot 6 种数据脱敏方案,第 5 种直接封神!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
别再手写了!SpringBoot 6 种数据脱敏方案,第 5 种直接封神!

沉默是金,总会发光

大家好,我是沉默

在日常开发中,你一定遇到过这种需求:

手机号中间四位要打星
身份证号要隐藏中间
邮箱只能露前缀
银行卡只能看头尾

比如

手机号:13812345678 → 138****5678
身份证:430101199003078888 → 430101********8888
姓名:张三四 → 张*四
邮箱:12345678@qq.com → 1234****@qq.com
银行卡:6230351888852405 → 6230********2405

于是问题来了:

  • 写在 Controller?太乱

  • 写在 Service?污染业务

  • 写在 SQL?维护地狱

  • 写在 VO?嵌套一多就炸

这就是数据脱敏(Data Masking)

今天这篇文章,我直接把我在真实项目里用过的 6 种脱敏方案一次性讲清楚,Spring Boot 拿来就能用。

-01-

1-2

方案一|Hutool 工具库(懒人必备)

如果你不想造轮子,那就一句话:

直接用 Hutool

依赖

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.0</version>
</dependency>

使用示例

String phone= DesensitizedUtil.mobilePhone("13812345678");
String idCard= DesensitizedUtil.idCardNum("430101199003078888", 6, 4);
String name= DesensitizedUtil.chineseName("张三四");
String email= DesensitizedUtil.email("12345678@qq.com");
String bankCard= DesensitizedUtil.bankCard("6230351888852405");

  • 开箱即用

  • 灵活性有限

  • 适合小项目 / 原型 / 快速交付

方案二|正则工具类(最直观)

不想引第三方?那就自己写工具类

思路很简单:
输入原值 → 正则替换 → 返回脱敏值

使用方式

user.setPhone(SensitiveUtil.maskPhone(user.getPhone()));
user.setIdCard(SensitiveUtil.maskIdCard(user.getIdCard()));

  • 好理解、好调试

  • 每个地方都要手动调

  • 字段少、结构简单的场景

-02-

3-4

方案三|注解 + Jackson(工程化第一步)

很多人做到这里会开始意识到一个问题:

“我不想每个接口都手动脱敏”

那就该用注解 + Jackson 序列化了。

思路:

在字段上标注
JSON 序列化时自动脱敏
业务代码 0 感知

@Sensitive(SensitiveType.PHONE)
private String phone;

优点很明显:

  • 统一出口

  • 性能好(只在序列化阶段)

  • 对嵌套对象无能为力

但是,真正的难题出现了。

痛点|嵌套对象脱敏,前面方案全失效

来看一个真实结构

public class User {
@Sensitive(SensitiveType.PHONE)
private String phone;

private UserDetail detail;
}

public class UserDetail {
@Sensitive(SensitiveType.ID_CARD)
private String idCard;
}

结果:

  • phone脱敏

  • detail.idCard明文

这在真实项目里,是事故级风险


-03-

5-6

方案五|AOP 深度脱敏(架构级推荐)

这才是中大型项目的正确解法

不是“在哪脱敏”,而是“统一在出口治理”

  • Controller / Service 返回值

  • 无论是:

    • 单对象

    • List

    • Map

    • Page

    • 多层嵌套

全部递归处理

核心流程图

请求 → Controller → ServiceAOP 环绕拦截递归扫描返回对象找到@Sensitive字段执行脱敏返回

效果

{
"name":"张*四",
"phone":"138****5678",
"detail":{
"emergencyPhone":"139****8765"
}
}

为什么我强烈推荐它?

  • 一次配置,全局生效

  • 支持任意嵌套

  • 业务代码零侵入

  • 后期统一治理

这已经是**“安全架构层”的方案**了。

方案六|MySQL 层脱敏(DB 视角)

这是完全不同的思路

在数据库层就不让你看到明文

SELECT
CONCAT(LEFT(phone,3),'****',RIGHT(phone,4)) AS phone
FROM users;

适合谁?

  • 报表系统

  • 只读账号

  • DBA 安全视图

  • 数据分析场景

-04-

总结

六种方案对比表

方案

优点

缺点

场景

Hutool

不灵活

小项目

工具类

简单

手动多

少量字段

Jackson

自动化

不支持深层

API 输出

Getter

轻量

重复代码

VO 控制

AOP 深度脱敏

⭐⭐⭐⭐⭐

实现复杂

中大型项目

MySQL

DB 安全

SQL 复杂

报表

最佳实践建议(面试 & 实战通吃)

  • 新手 / 小项目:方案一、二

  • 标准 REST API:方案三

  • 复杂对象 + 统一治理方案五(AOP)

  • 数据安全隔离:方案六(DB)

数据脱敏不是“字符串处理”,而是“安全架构设计”

当你的系统开始考虑:

  • 合规

  • 安全

  • 数据最小暴露原则

那你就已经不是在写 CRUD 了,而是在做工程设计

如果这篇文章对你有帮助,
欢迎点赞 / 收藏 / 转发

-05-

粉丝福利

我这里创建一个程序员成长&副业交流群,

和一群志同道合的小伙伴,一起聚焦自身发展

可以聊:

技术成长与职业规划,分享路线图、面试经验和效率工具,

探讨多种副业变现路径,从写作课程到私活接单,

主题活动、打卡挑战和项目组队,让志同道合的伙伴互帮互助、共同进步。

如果你对这个特别的群,感兴趣的,

可以加一下,微信通过后会拉你入群,

但是任何人在群里打任何广告,都会被我T掉。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:33:40

Spring4Shell CVE-2022-22965原理及复现

Spring4Shell&#xff08;正式编号为 CVE-2022-22965&#xff09;是 2022 年 3 月底发现的一个存在于 Spring Framework 中的远程代码执行&#xff08;RCE&#xff09;高危漏洞。由于 Spring 框架在 Java 生态中的核心地位&#xff0c;该漏洞曾引发了全行业的广泛关注&#xff…

作者头像 李华
网站建设 2026/6/10 11:50:49

拥抱大数据领域数据可视化,提升数据分析效率

拥抱大数据领域数据可视化&#xff0c;提升数据分析效率关键词&#xff1a;大数据、数据可视化、数据分析效率、可视化工具、可视化方法摘要&#xff1a;本文深入探讨了大数据领域的数据可视化&#xff0c;旨在帮助大家通过数据可视化来提升数据分析效率。首先介绍了数据可视化…

作者头像 李华
网站建设 2026/6/10 12:00:50

数字孪生在航空发动机总体性能中的应用前景

截至2026年初&#xff0c;数字孪生技术在航空发动机总体性能优化中的应用已从概念验证迈向规模化落地阶段&#xff0c;展现出广阔的应用前景。其核心价值在于通过构建高保真、多物理场耦合、全生命周期覆盖的虚拟镜像&#xff0c;实现对发动机设计、制造、试验、运维等各环节性…

作者头像 李华
网站建设 2026/6/9 18:45:55

雷军又发奖了!1000万奖金花落“玄戒”,未来5年还要砸2000亿搞研发

1月8日一早&#xff0c;科技圈就被雷军的一条消息刷屏了。小米不仅开了个隆重的技术大奖颁奖礼&#xff0c;雷军还在社交平台上大大方方地宣布&#xff1a;今年的千万技术大奖&#xff0c;被“玄戒O1”团队稳稳拿下了。能在小米这么多顶尖项目里脱颖而出&#xff0c;拿到这沉甸…

作者头像 李华
网站建设 2026/6/10 12:01:55

基于51单片机的排队叫号系统—两块单片机串行通信

基于51单片机的排队叫号系统 &#xff08;仿真&#xff0b;程序原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.主机通过4个按键模拟4个柜台号&#xff0c;按下按键实现叫号&#xff1b; 2.柜台叫号后&#xff0c;LCD1602显示被叫的号码及叫号的柜…

作者头像 李华
网站建设 2026/6/10 12:02:24

10分钟玩转阿里通义Z-Image-Turbo:零基础搭建你的AI绘画工坊

10分钟玩转阿里通义Z-Image-Turbo&#xff1a;零基础搭建你的AI绘画工坊 作为一名数字艺术爱好者&#xff0c;你是否曾被AI生成图像的无限创意所吸引&#xff0c;却又被复杂的模型部署和GPU配置劝退&#xff1f;阿里通义Z-Image-Turbo作为一款高性能文生图模型&#xff0c;能够…

作者头像 李华