Spring Boot 保护敏感配置的 4 种方法

1、配置中心(支持自动解密)

我觉得还得看大家的架构情况,如果使用了外置的第三方配置中心(支持自动解密的那种),就可以把所有的配置信息存储在配置中心,比如  Spring Cloud 生态中的配置中心,那么可以使用自带的加、解密机制保护敏感信息:

spring:   
  datasource:     
    username: '{cipher}t1s293294187a31f35dea15e8bafaf7774532xxcc20d6d6dd0dfa5ae753d6836'

需要加密的内容以  {cipher} 开头标识,并注意要使用单引号包起来

2、数据库机制

可以把所有配置信息存储到数据库,系统启动的时候全部加载进内存。存储的时候,敏感信息以对称加密算法进行加密存储,然后加载的时候自动解密到内存。

 

3、自定义加解密机制

先用系统已有的对称加密算法对数据库连接信息加密:

spring:   
  datasource:     
    username: '{cipher}t1s293294187a31f35dea15e8bafaf7774532xxcc20d6d6dd0dfa5ae753d6836'

排除 Spring Boot 系统自带的数据源自动配置,然后自行组装数据源 Spring Bean。

判断获取的配置值是否以  {cipher} 这个标识开头,如果是,则用系统约定的对称加密算法进行解密,然后再设置数据源,比如:

// 示例代码
@Bean
public DataSource dataSource(){
 DataSource dataSource = new DruidDataSource();
 
 // 解密
 String username = this.getUsername();
 if (username.startWith('{cipher}')){
  username = Encrypt.decrypt(username, this.getKey()))
 } 
 dataSource.setUsername(username);
 
 ...
 
 return dataSource;
}


4、Jasypt Spring Boot

Jasypt Spring Boot 是一个专门为 Spring Boot 项目中的属性提供加密支持的框架

开源地址:

https://github.com/ulisesbocchio/jasypt-spring-boot

4.1 Jasypt Spring Boot 实战

Jasypt Spring Boot 有 3 种集成方法:

1、如果开启了 Spring Boot 的自动配置(使用了 @SpringBootApplication 或者 @EnableAutoConfiguration 注解):只需要添加 jasypt-spring-boot-starter 依赖即可,这种会在整个 Spring Environment 中启用可加密属性;

2、添加 jasypt-spring-boot 依赖,同时在 Spring 主要配置类上添加 @EnableEncryptableProperties 注解,这种会在整个 Spring Environment 中启用可加密属性;

3、添加 jasypt-spring-boot 依赖,使用 @EncrytablePropertySource 注解声明各个可加密的参数上,这种只适用于独立配置参数加解密;

 

4.1.1 引入依赖

核心依赖:

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

Maven 插件(可选)

<build>
    <plugins>
        <plugin>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-maven-plugin</artifactId>
            <version>${jasypt-spring-boot.version}</version>
        </plugin>
    </plugins>
</build>

4.1.2 添加密钥

jasypt:
  encryptor:
    password: G9w0BAQEFAASCBKYwggSiAgEAAoIBAQC
    property:
      prefix: "ENC@["
      suffix: "]"
 

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...