当前位置: 首页 > 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注解),可全方位保护敏感信息。建议结合多种方案,确保密码在存储、传输和展示时均处于脱敏状态。

http://www.xdnf.cn/news/626689.html

相关文章:

  • 【一. Java基础:注释、变量与数据类型详解】
  • 安卓11 多任务视图270 度的情况报错
  • n 阶矩阵 A 可逆的充分必要条件是 ∣ A ∣ ≠ 0
  • (泛函分析)线性算子谱的定义,谱的分类,谱的性质。
  • 精益数据分析(83/126):从病毒性到营收——创业阶段的关键跨越与商业化策略
  • 《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》
  • go多线程压测监控
  • 每日算法刷题Day14 5.24:leetcode不定长滑动窗口求子数组个数越长越合法4道题,用时1h20min
  • 行为型:模板方法模式
  • Web 安全进阶:前端信封加解密技术详解
  • day35 python模型可视化与推理
  • 【卫星通信】通信卫星链路预算计算及其在3GPP NTN中的应用
  • [Windows] GDownload v1.0.0
  • 豪越科技:消防应急装备智能仓储管理新变革
  • 命令执行漏洞深度解析与防御指南
  • 《Claude:人工智能界的璀璨新星》
  • 如何对两段轨迹进行拟合过渡
  • 【Matlab】雷达图/蛛网图
  • [Linux] 再谈 Linux Socket 编程技术(代码示例)
  • redis的主从复制
  • JavaSE常用API之Runtime类:掌控JVM运行时环境
  • 分布式系统设计实战 - 服务注册中心最佳选型
  • char类型既能表达字符又能表达整数
  • IDEA中创建SpringBoot项目没有Java8
  • 初级消防设施操作员证有用吗?
  • 香橙派3B学习笔记2:Vscode远程SSH登录香橙派_权限问题连接失败解决
  • Neural ODE(神经常微分方程网络)深度解析
  • C# 高性能写入txt大量数据
  • Java IO流学习指南:从小白到入门
  • PS2025 v26.7 Photoshop2025+AI生图扩充版,支持AI画图