使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开application.properties或application.yml,比如mysql登陆密码,redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性。
jasypt由一个国外大神写了一个springboot下的工具包,下面直接看代码:
1、maven依赖引入:
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2、application.yml配置文件
# 加密所需的salt(盐)
jasypt:
encryptor:
password: l&id81!lw # 根密码用于加密
algorithm: PBEWithMD5AndDES
# 加密方式默认为PBEWithMD5AndDES 可以更改为 PBEWithMD5AndTripleDES
3、通过测试类在main方法测试生成秘钥:
//这是JUnit的注解,通过这个注解让SpringJUnit4ClassRunner这个类提供Spring测试上下文。
@RunWith(SpringRunner.class)
//这是Spring Boot注解,为了进行集成测试,需要通过这个注解加载和配置Spring应用上下
@SpringBootTest
@WebAppConfiguration
public class PwdDecOrEnc {
@Test
public void decrypt() {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithm("PBEWithMD5AndDES");
config.setPassword("l&id81!lw");
encryptor.setConfig(config);
String name = encryptor.encrypt("ebuy");
String password = encryptor.encrypt("123456");
//解密
String mdName =encryptor.decrypt("LtcG3xB87zaxyM4ddTCZUg==");
String mdPassword =encryptor.decrypt("xIJQ9OWQeDfsnk6i25uPSg==");
System.out.println(name+"----------------"+mdName);
System.out.println(password+"----------------"+mdPassword);
}
public static void main(String[] args) {
new PwdDecOrEnc().decrypt();
}
}
运行结果为: meDBUdDTyHBY6jdsBrknEA==----------------ebuy EhiZCKp77GkooRSzFmQ5wg==----------------123456 Process finished with exit code 0
4.将上面生成的name和password替换配置文件中的数据库账户和密码,替换后如下:
mysql. userName: ENC(P1qn2ZBGzneOw5c5kfMTIw==)
mysql.passWord: ENC(nL7ZPZoMBWPXivkF0SYOxw==)
spring.datasource.username: ${mysql.userName}
spring.datasource.password: ${mysql.passWord}
5、考虑根密码写在配置文件中并不安全 可以将其放入到启动参数中实现加密
实现方法如下图:
设置完后记得删除此段配置
# 加密所需的salt(盐)
jasypt:
encryptor:
password: l&id81!lw # 根密码用于加密
algorithm: PBEWithMD5AndDES
# 加密方式默认为PBEWithMD5AndDES 可以更改为 PBEWithMD5AndTripleDES