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

 更新时间:2025年05月25日 15:58:22   作者:悟能不能悟  
这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

​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敏感信息脱敏处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • tk.mybatis实现uuid主键生成的示例代码

    tk.mybatis实现uuid主键生成的示例代码

    本文主要介绍了tk.mybatis实现uuid主键生成的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 聊一聊Java的JVM类加载机制

    聊一聊Java的JVM类加载机制

    这篇文章主要介绍了聊一聊Java的JVM类加载机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java中Future和FutureTask的示例详解及使用

    Java中Future和FutureTask的示例详解及使用

    Java中的Future和FutureTask通常和线程池搭配使用,用来获取线程池返回执行后的返回值,下面这篇文章主要给大家介绍了关于Java中Future和FutureTask使用的相关资料,需要的朋友可以参考下
    2021-11-11
  • SpringMVC获取HTTP中元素的实现示例

    SpringMVC获取HTTP中元素的实现示例

    本文主要介绍了SpringMVC获取HTTP中的元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • Spring MVC文件配置以及参数传递示例详解

    Spring MVC文件配置以及参数传递示例详解

    这篇文章主要给大家介绍了关于Spring MVC文件配置以及参数传递的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • java并发编程专题(十一)----(JUC原子类)数组类型详解

    java并发编程专题(十一)----(JUC原子类)数组类型详解

    这篇文章主要介绍了JAVA JUC原子类 数组类型详解的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 探索Java I/O 模型的演进

    探索Java I/O 模型的演进

    什么是同步?什么是异步?阻塞和非阻塞又有什么区别?本文先从 Unix 的 I/O 模型讲起,介绍了5种常见的 I/O 模型。而后再引出 Java 的 I/O 模型的演进过程,并用实例说明如何选择合适的 Java I/O 模型来提高系统的并发量和可用性。,需要的朋友可以参考下
    2019-06-06
  • java基于AES对称加密算法实现的加密与解密功能示例

    java基于AES对称加密算法实现的加密与解密功能示例

    这篇文章主要介绍了java基于AES对称加密算法实现的加密与解密功能,结合完整实例形式分析了AES对称加密算法的定义与使用技巧,需要的朋友可以参考下
    2017-01-01
  • SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法

    SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法

    这篇文章主要介绍了SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • SpringCloud如何引用xxjob定时任务

    SpringCloud如何引用xxjob定时任务

    Spring Cloud 本身不直接支持 XXL-JOB 这样的定时任务框架,如果你想在 Spring Cloud 应用中集成 XXL-JOB,你需要手动进行配置,本文给大家介绍SpringCloud如何引用xxjob定时任务,感兴趣的朋友一起看看吧
    2024-04-04

最新评论