开发者

SpringBoot如何对密码等敏感信息进行脱敏处理

开发者 https://www.devze.com 2025-05-26 10:19 出处:网络 作者: 悟能不能悟
目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结​​1. 配置文件敏感信息脱敏​
目录
  • ​1. 配置文件敏感信息脱敏​
  • ​2. 日志脱敏​
  • ​3. API响应脱敏​
  • ​4. 其他注意事项​
  • ​总结​

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

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

步骤​:

添加依赖:

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>

加密密码:

BasicTextEncryptor encryptor = new BasicTextEncryptor();
encryptor.setPassword("your-secret-key"); // 加密密钥
Stringphp encryptedPassword = encryptor.encrypt("your-real-password");

在配置文件中使用加密值(用ENC()包裹):

spring:
  datasource:
    password: ENC(encryptedPassword)

启动时指定密钥:

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

(2) 自定义属性源(实现PropertySource)

public class MaskedPropertySource extends PropertySource<Map<String, Object>> {
    public MaskedPropertySource(String http://www.devze.comname, Map<String, Object> source) {
        super(name, source);
    }
 
    @Override
    public 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} - %mapythonskedMsg%n</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

自定义转换器:

public class MaskingPatternLayout extends PatternLayout {
    @Override
    public String doLayout(ILoggingEvent event) {
        String message = super.doLayout(event);
        return message.replaceAll("passwww.devze.comword\":\"(.*?)\"", "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> {
    @Override
    public 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注解),可全方位保护敏感信息。建议结合多种方案,确保密码在存储、传输和展示时均处于脱敏状态。

到此这篇关于SpringBoot如何对密码等敏感信息进行脱敏处理的文章就介绍到这了,更多相关SpringBoot敏感信息脱敏处理内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号