如何用Java实现数据脱敏处理_Java敏感信息保护方案说明

发布时间 - 2026-01-02 00:00:00    点击率:
Java数据脱敏核心是识别敏感字段、定义规则、适时替换;支持手机号、身份证、姓名、银行卡、邮箱等类型注解标记,通过反射工具类自动处理,并借助ResponseBodyAdvice实现Spring MVC响应前统一脱敏。

Java中实现数据脱敏,核心是**识别敏感字段 + 定义脱敏规则 + 在合适时机执行替换**,不依赖第三方框架也能快速落地。

明确常见敏感字段类型和脱敏方式

不同字段适用不同脱敏策略,需按业务安全等级选择:

  • 手机号:保留前3位和后4位,中间用*代替(如 138****1234)
  • 身份证号:保留前6位和后4位,中间掩码(如 110101****1234)
  • 姓名:只显示姓氏,名用*替代(如 张*);多人名可统一处理为“某先生/某女士”
  • 银行卡号:保留后4位,其余用*填充(如 **** **** **** 5678)
  • 邮箱:保留@前首字符和域名部分(如 z***@example.com)

在实体类中声明脱敏标记(轻量级注解方案)

自定义一个 @Desensitize 注解,标注需要脱敏的字段,并指定脱敏类型:

@Target({FIELD})
@Retention(RUNTIME)
public @interface Desensitize {
    DesensitizeType value() default DesensitizeType.DEFAULT;
}

再定义枚举 DesensitizeType 包含 PHONE、ID_CARD、NAME、EMAIL 等值。这样既清晰又便于后续统一处理。

通过反射 + 注解实现实体自动脱敏

写一个工具类 DesensitizeUtil,遍历对象所有字段,检查是否含 @Desensitize 注解,根据类型调用对应脱敏方法:

  • 使用 Field.setAccessible(true) 访问私有字段
  • 对字符串类型字段做掩码替换,非字符串跳过
  • 支持嵌套对象(递归处理)和集合(遍历每个元素)
  • 脱敏逻辑集中管理,新增类型只需扩展枚举和 switch 分支

结合Spring MVC在响应前统一脱敏

利用 ResponseBodyAdvice 接口,在 Controller 返回响应体之前拦截并脱敏:

@ControllerAdvice
public class DesensitizeResponseAdvice implements ResponseBodyAdvice {
    @Override
    public Object beforeBodyWrite(Object body, ... ) {
        return DesensitizeUtil.desensitize(body);
    }
}

这样所有返回 JSON 的接口自动生效,无需每个 Controller 手动调用,也避免脱敏逻辑散落在业务代码中。


# java  # js  # json  # access  # 工具  # ai  # switch  # 邮箱  # spring mvc  # java实现 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Python进程池调度策略_任务分发说明【指导】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  网站制作免费,什么网站能看正片电影?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何快速搭建FTP站点实现文件共享?  如何在万网开始建站?分步指南解析  深入理解Android中的xmlns:tools属性  Java解压缩zip - 解压缩多个文件或文件夹实例  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  EditPlus中的正则表达式 实战(2)  香港服务器租用每月最低只需15元?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  iOS中将个别页面强制横屏其他页面竖屏  Laravel如何集成Inertia.js与Vue/React?(安装配置)  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel观察者模式如何使用_Laravel Model Observer配置  java获取注册ip实例  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  JavaScript如何实现路由_前端路由原理是什么  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  LinuxCD持续部署教程_自动发布与回滚机制  phpredis提高消息队列的实时性方法(推荐)  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  linux写shell需要注意的问题(必看)  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  教你用AI润色文章,让你的文字表达更专业  简单实现Android验证码  详解jQuery中基本的动画方法  韩国服务器如何优化跨境访问实现高效连接?  网站制作报价单模板图片,小松挖机官方网站报价?  javascript中闭包概念与用法深入理解  如何在服务器上三步完成建站并提升流量?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  重庆市网站制作公司,重庆招聘网站哪个好?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  JavaScript常见的五种数组去重的方式  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何在Windows虚拟主机上快速搭建网站?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  湖南网站制作公司,湖南上善若水科技有限公司做什么的?