springboot(14)配置文件加密解密

1、介绍

jasypt-spring-boot

jasypt可以在springboot注入property和yml配置文件中的值之前,将配置文件中的值先预先处理的工具。可以用来实现对数据库账号密码等敏感信息密文解密的功能。

2、Maven依赖

1
2
3
4
5
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>

3、注册解密Bean

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Configuration
public class EncryptionPropertyConfig {

@Bean(name="encryptablePropertyResolver")
public EncryptablePropertyResolver encryptablePropertyResolver() {
return new EncryptionPropertyResolver();
}

class EncryptionPropertyResolver implements EncryptablePropertyResolver {

@Override
public String resolvePropertyValue(String value) {
if(StringUtils.isBlank(value)) {
return value;
}
// 值以DES@开头的均为DES加密,需要解密
if(value.startsWith("DES@")) {
return resolveDESValue(value.substring(4));
}
// 不需要解密的值直接返回
return value;
}

private String resolveDESValue(String value) {
// 自定义DES密文解密
return DESUtil.getDecryptString(value);
}

}
}

4、测试

4.1、property配置文件

1
2
3
4
5
6
# 127.0.0.1的密文为e3zcSlYS29N0Y3i+mVdkgQ==
datasource.host=DES@e3zcSlYS29N0Y3i+mVdkgQ==
# 3306的密文为S6mBLsaSBEw=
datasource.port=DES@S6mBLsaSBEw=
datasource.database=test
datasource.url=jdbc:mysql://${datasource.host}:${datasource.port}/${datasource.database}?useUnicode=true&amp;characterEncoding=utf8

4.2、注入

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {

@Value("${datasource.url}")
private String url;

@Test
public void testJasypt() {
System.out.println(url);
}

}

4.3、输出

1
jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf8