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

Spring Boot中如何对密码等敏感信息进行脱敏处理

以下是常见的脱敏方法及实现步骤,涵盖配置、日志和API响应等多个层面:


1. 配置文件敏感信息脱敏

(1) 使用加密库(如Jasypt)

步骤​:

  1. 添加依赖:

    <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version>
    </dependency>
  2. 加密密码:

    BasicTextEncryptor encryptor = new BasicTextEncryptor();
    encryptor.setPassword("your-secret-key"); // 加密密钥
    String encryptedPassword = encryptor.encrypt("your-real-password");
  3. 在配置文件中使用加密值(用ENC()包裹):

    spring:datasource:password: ENC(encryptedPassword)
  4. 启动时指定密钥:

    java -jar your-app.jar --jasypt.encryptor.password=your-secret-key

(2) 自定义属性源(实现PropertySource
public class MaskedPropertySource extends PropertySource<Map<String, Object>> {public MaskedPropertySource(String name, Map<String, Object> source) {super(name, source);}@Overridepublic Object getProperty(String name) {Object value = source.get(name);if (name.contains("password") && value != null) {return "​**​*​**​*"; // 返回脱敏值}return value;}
}

2. 日志脱敏

(1) 使用Logback的replace功能

logback-spring.xml中配置脱敏规则:

<configuration><conversionRule conversionWord="maskedMsg" converterClass="com.example.MaskingPatternLayout"/><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %maskedMsg%n</pattern></encoder></appender><root level="info"><appender-ref ref="CONSOLE" /></root>
</configuration>

自定义转换器:

public class MaskingPatternLayout extends PatternLayout {@Overridepublic String doLayout(ILoggingEvent event) {String message = super.doLayout(event);return message.replaceAll("password\":\"(.*?)\"", "password\":\"​**​*​**​*\"");}
}

3. API响应脱敏

(1) 使用Jackson注解忽略敏感字段
public class UserDTO {private String username;@JsonIgnore // 完全忽略该字段private String password;@JsonProperty(access = Access.WRITE_ONLY) // 仅允许写入,响应时不序列化private String secretKey;
}
(2) 自定义序列化器
public class PasswordSerializer extends JsonSerializer<String> {@Overridepublic void serialize(String value, JsonGenerator gen, SerializerProvider provider) throws IOException {gen.writeString("​**​*​**​*"); // 返回固定脱敏值}
}// 在DTO字段上指定序列化器
public class UserResponse {@JsonSerialize(using = PasswordSerializer.class)private String password;
}

4. 其他注意事项

  • 环境变量​:优先使用环境变量传递敏感信息,而非明文配置文件:
    export SPRING_DATASOURCE_PASSWORD=your_password
  • 安全存储密钥​:加密密钥(如Jasypt的密钥)应通过安全渠道(如KMS、Vault)管理,避免硬编码。
  • 代码审查​:避免在代码中硬编码密码,使用.gitignore排除敏感配置文件。

总结

通过配置文件加密(如Jasypt)、日志脱敏(Logback替换)和API响应控制(Jackson注解),可全方位保护敏感信息。建议结合多种方案,确保密码在存储、传输和展示时均处于脱敏状态。

相关文章:

  • PCB设计教程【入门篇】——PCB设计基础-PCB构成与组成
  • 国际前沿知识系列五:时间序列建模方法在头部撞击运动学测量数据降噪中的应用
  • linux 内存碎片分析
  • 2025年电工杯数学建模B题【垃圾运输】原创论文分享
  • python第三方库安装错位
  • 机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴
  • Vue中的事件绑定【3】
  • 天地图实景三维数据分享(江苏)
  • 同为科技 智能PDU产品选型介绍 EN10/I801CI
  • 【IEEE 2025】低光增强KANT(使用KAN代替MLP)----论文详解与代码解析
  • docker虚拟化、容器化
  • 从零开始:Python语言进阶之多态
  • redis配置带验证的主从复制
  • 再谈Linux进程:进程等待、进程替换与环境变量
  • C++ 继承详解:基础篇(含代码示例)
  • NRM:快速切换 npm 镜像源的管理工具指南
  • RPG游戏设计战斗篇——战法牧协同作战体系研究
  • 如何把vue项目部署在nginx上
  • IP查询基础介绍
  • 【商业分析】充分了解“特性”和“功能”的区别,加强资源的聚焦度。
  • 做b2b b2c型的混合网站/百度极速版下载安装最新版
  • wordpress弹出搜索结果/手机seo百度点击软件
  • 网页建站点/怎么做自己的网页
  • king 主题WordPress/seo是什么意思
  • 北京与城乡建设委员会网站/培训课
  • 网站建设yankt/小红书搜索指数