jasypt可以在springboot注入property和yml配置文件中的值之前,將配置文件中的值先預(yù)先處理的工具??梢杂脕韺?shí)現(xiàn)對數(shù)據(jù)庫賬號密碼等敏感信息密文解密的功能。
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
@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);
}
}
}
# 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&characterEncoding=utf8
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
@Value("${datasource.url}")
private String url;
@Test
public void testJasypt() {
System.out.println(url);
}
}
jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8