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

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.lryc.cn/news/2385620.html

相关文章:

  • React从基础入门到高级实战:React 基础入门 - JSX与组件基础
  • 房贷利率计算前端小程序
  • 在Visual Studio中进行cuda编程
  • Fastrace:Rust 中分布式追踪的现代化方案
  • Linux云计算训练营笔记day13【CentOS 7 find、vim、vimdiff、ping、wget、curl、RPM、YUM】
  • 黑马Java基础笔记-15
  • Elasticsearch简单集成java框架方式。
  • 【RAG文档切割】从基础拆分到语义分块实战指南
  • stream数据流
  • 利用 XML 外部实体注入(XXE)读取文件和探测内部网络
  • 软件设计师“排序算法”真题考点分析——求三连
  • Visual Studio 2019/2022:当前不会命中断点,还没有为该文档加载任何符号。
  • vue--ofd/pdf预览实现
  • Python 爬虫之requests 模块的应用
  • 【MySQL】CRUD
  • Spring Boot微服务架构(三):Spring Initializr创建CRM项目
  • 【笔记】PyCharm 中创建Poetry解释器
  • SDL2常用函数SDL事件处理:SDL_Event|SDL_PollEvent
  • RAID技术全解析:从基础到实战应用指南
  • word通配符表
  • python中的numpy(数组)
  • C++ 正则表达式简介
  • iOS知识复习
  • rce命令执行原理及靶场实战(详细)
  • Fuzz 模糊测试篇JS 算法口令隐藏参数盲 Payload未知文件目录
  • 展示了一个三轴(X, Y, Z)坐标系!
  • 【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter1 初识小程序 - 3项目目录结构4快速上手
  • LLM Tuning
  • 云计算与大数据进阶 | 28、存储系统如何突破容量天花板?可扩展架构的核心技术与实践—— 分布式、弹性扩展、高可用的底层逻辑(下)
  • SQL每日一练(3)