一、概述
Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。
二、进行配置
1、首先在pom中引入jasypt依赖。
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>2、在配置文件中进行配置,配置秘钥。
jasypt:
encryptor:
password: ${JASYPT_PASSWORD} #此处配置的变量需要通过脚本进行传入(保证秘钥的安全性),如果是本地启动也可以直接配置一个值。3、在启动脚本中进行${JASYPT_PASSWORD}变量的赋值
export JASYPT_PASSWORD=msyd注:如果没有在2步骤中配置的秘钥直接是明文,则不需要此步的配置。
4、配置数据库中想要加密的变量,如username、password。需要把加密后的字符放在ENC()里。

5、那么字符是如何进行加密的呢,可以通过下面程序,将本来的明文进行加密。
import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest(classes= XX.class)
@RunWith(SpringRunner.class)
public class JasyptTest {
@Autowired
public StringEncryptor stringEncryptor;
@Test
public void encrypt() {
/**
* 生成时需要把配置文件中的password改成真正的秘钥,不能是变量
*/
System.out.println("userName-PWD: " + stringEncryptor.encrypt("root"));
System.out.println("password-PWD: " + stringEncryptor.encrypt("root123"));
}
}注:进行加密的程序启动前,需要将配置文件中的秘钥先配置成明文,否则程序运行时就会加载不到你所配置的秘钥。
6、建议最好将生产环境的秘钥配置成环境变量的形式, 以保证数据的安全性,但在本地启动时,最好还是将配置文件中的秘钥写成明文,而不是变量的形式,因为本地启动时,没有传入变量,秘钥的值就没有获取到,会导致程序异常。
注:如果启动时出现以下异常,或测试类中显示org.jasypt.encryption.StringEncryptor没有导入进来,可以尝试按以下方法解决:
FileNotFoundException:Caused by: java.io.FileNotFoundException: class path resource [com/ulisesbocchio/jasyptspringboot/configuration/EnableEncryptablePropertiesConfiguration.class] cannot be opened because it does not exist
需要重新配置一下你的pom.xml文件,多增加两个依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.jasypt</groupId>
<artifactId>jasypt</artifactId>
<version>1.9.2</version>
</dependency>
因为是内网,可能会导致jasypt-spring-boot-starter中的jasypt-spring-boot依赖不能下载下来,需要自己重新手动添加一下依赖到你的pom.xml文件中