SpringBoot敏感数据脱敏怎么处理

ops/2025/3/4 3:35:28/

在Spring Boot中处理敏感数据脱敏,可以通过以下几种方式实现,确保敏感信息在接口返回、日志输出、数据库存储等环节得到保护:


1. 使用注解 + Jackson序列化脱敏

通过自定义注解和Jackson的JsonSerializer实现数据脱敏,适合接口返回敏感数据时动态处理。

实现步骤:
  1. 定义脱敏策略枚举
java">public enum SensitiveStrategy {// 不同脱敏策略USERNAME(s -> s.replaceAll("(.).", "$1**")),PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")),ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1****$2"));private final Function<String, String> desensitizer;SensitiveStrategy(Function<String, String> desensitizer) {this.desensitizer = desensitizer;}public Function<String, String> getDesensitizer() {return desensitizer;}
}
  1. 自定义脱敏注解
java">@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveSerialize.class)
public @interface Sensitive {SensitiveStrategy strategy();
}
  1. 自定义序列化器
java">public class SensitiveSerialize extends JsonSerializer<String> {private SensitiveStrategy strategy;public SensitiveSerialize(SensitiveStrategy strategy) {this.strategy = strategy;}@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {gen.writeString(strategy.getDesensitizer().apply(value));}
}
  1. 在DTO字段上使用注解
java">public class UserDTO {@Sensitive(strategy = SensitiveStrategy.PHONE)private String phone;@Sensitive(strategy = SensitiveStrategy.ID_CARD)private String idCard;
}

2. 日志脱敏处理

使用日志框架(如Logback或Log4j2)的替换规则,避免敏感信息写入日志。

Logback配置示例(通过正则替换):
<configuration><conversionRule conversionWord="msg" converterClass="com.example.LogMaskConverter"/>
</configuration>

自定义转换器:

java">public class LogMaskConverter extends ClassicConverter {@Overridepublic String convert(ILoggingEvent event) {return event.getMessage().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2") // 手机号.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1****$2"); // 身份证}
}

3. 数据库加密存储

使用加密工具(如Jasypt)对敏感字段进行加密存储。

实现步骤:
  1. 添加依赖
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version>
</dependency>
  1. 配置加密密钥
jasypt.encryptor.password=your_secret_key
  1. 在实体类中使用加密注解
java">public class User {@Encryptedprivate String phone;@Encryptedprivate String idCard;
}

4. 其他注意事项

  • 全局性处理:结合AOP对所有Controller返回结果进行统一脱敏。
  • 深度脱敏:处理嵌套对象(如集合、Map中的敏感数据)。
  • 性能优化:避免在高频接口中使用复杂正则匹配。
  • 测试验证:确保脱敏后的数据不可逆且符合业务需求。

总结

根据场景选择合适方案:

  • 接口脱敏:使用Jackson自定义序列化。
  • 日志安全:配置日志替换规则。
  • 存储安全:数据库字段加密。
  • 传输安全:启用HTTPS + 数据加密传输。

通过组合以上方法,可系统性地保护敏感数据,满足GDPR等数据安全法规要求。


http://www.ppmy.cn/ops/162512.html

相关文章

使用ZFile打造属于自己的私有云系统结合内网穿透实现安全远程访问

文章目录 前言1.关于ZFile2.本地部署ZFile3.ZFile本地访问测试4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址 前言 在数字化的今天&#xff0c;我们每个人都是信息的小能手。无论是职场高手、摄影达人还是学习狂人&#xff0c;每天都在创造…

UniApp 使用 u-loadmore 完整步骤

文章目录 一、前期准备1. 安装 uView - UI 二、使用 u-loadmore组件1. 创建页面2. 编写页面代码模板部分&#xff08;loadmore-demo.vue&#xff09;样式部分脚本部分 三、要点补充1. u-loadmore 状态说明2. 数据请求优化3. 性能优化4. 兼容性问题 在 UniApp 开发中&#xff0c…

FX PDF编辑器支持在手机上进行各种PDF文档的操作

​FX PDF编辑器 今天要给大家安利一款超厉害的PDF处理工具&#xff0c;它可是PDF界的“老大哥”&#xff0c;在手机上就能轻松搞定各种PDF文档操作&#xff0c;简直就是移动办公的神器&#xff01;无论是编辑、转换、注释、签名、加密还是合并PDF文件&#xff0c;它都能轻松搞定…

nginx 动态计算拦截非法访问ip

需求&#xff1a;在Nginx上实现一个动态拦截IP的方法&#xff0c;具体是当某个IP在1分钟内访问超过60次时&#xff0c;将其加入Redis并拦截&#xff0c;拦截时间默认1天。 技术选型&#xff1a;使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑…

【Golang学习之旅】Go-zero + Gen:如何使用 Gen 提升 Go 开发效率

文章目录 前言一、Go-zero简介二、Gen工具简介2.1 Gen的功能与特点2.2 Gen的工作原理 三、Go-zero Gen&#xff1a;结合的优势3.1为什么选择Go-zero与Gen3.2 Gen的代码生成与Go-zero的结合点 四、实际案例&#xff1a;Go-zero Gen的应用4.1 构建一个用户管理系统4.2 定义Gen配…

[特殊字符]在eclipse中导入JAVA的jar包方法

右键 项目 → Properties &#xff08;图1&#xff09; 选择 Java Build Path &#xff0c;切换到 Libraries 再选择 classpath&#xff0c;点击 Add External JARs 选择需要导入的Jar包&#xff0c;最后点击Apply and Close&#xff08;图2&#xff09; 查看该项目下的Ref…

进程优先级、进程调度以及Linux2.6内核进程调度队列

一.进程优先级 优先级概念 由于操作系统具有共享性&#xff0c;操作系统的资源是共享的&#xff0c;当多个进程要访问同一个资源&#xff0c;需要通过一定方式来确定访问顺序&#xff0c;优先级就是进程获取资源的先后顺序。 CPU资源分配的先后顺序&#xff0c;就是指进程的…

2025年Linux主力系统选择指南:基于最新生态的深度解析(附2025年发行版对比速查表)

Linux发行版生态在2025年持续演进&#xff0c;既有经典系统的迭代升级&#xff0c;也有新兴项目的崛起。本文结合最新行业动态&#xff0c;从个人用户到企业场景&#xff0c;梳理主力系统选择策略&#xff0c;助你找到最适合的Linux发行版。 一、新手友好型&#xff1a;平滑过渡…