当前位置: 代码网 > it编程>编程语言>Java > SpringBoot如何对密码等敏感信息进行脱敏处理

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

2025年05月25日 Java 我要评论
​1. 配置文件敏感信息脱敏​(1) 使用加密库(如jasypt)步骤​:添加依赖:<dependency> <groupid>com.github.ulisesbocc

​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"); // 加密密钥
string 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 name, 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} - %maskedmsg%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("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> {
    @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敏感信息脱敏处理内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com