Spring Boot + jasypt 对配置文件加密
本文参考,请参考原文
SpringBoot进阶教程(六十三)Jasypt配置文件加密
背景
在开发过程中,直接把数据库连接信息等敏感信息以明文方式存储在配置文件中,会带来安全隐患。所以呢,我们需要对这些需要保密的敏感信息进行加密处理,这里就用到了Jasypt。通过jasypt-spring-boot 加密Spring Boot项目中配置文件的明文密码
Jasypt使用步骤
1.引入起步依赖
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency>
2.在配置文件application.properties中配置密钥(这是为了第3步加密,加密后记得删掉!!!)
# 加密所需的salt(盐)
jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7TYO0987
jasypt.encryptor.password
是自定义秘钥,尽量复杂,但是要记得!不能放在代码和配置文件里面!不能泄漏!
3.生成密码(生成之后记得把测试代码删掉,不要提交,否则白加密!!!)
import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class JasyptTest {
@Autowired
private StringEncryptor stringEncryptor;
Logger logger = LoggerFactory.getLogger(JasyptTest .class);
@Test
public void getPass() {
String url = stringEncryptor.encrypt("your jdbc url");
String name = stringEncryptor.encrypt("your user name");
String password = stringEncryptor.encrypt("your password");
logger.info("url is : " + url);
logger.info("name is : " + name);
logger.info("password is : " + password);
}
}
运行单元测试,记录下加密后的密文
url is : c57K1C9qZFf/Y30dGcauCVwip7lTcMIX35oWjkAN6MPi+xucxmDXmFmOvf8LOXIq
name is : kyMOHf2vr5LS2pjL2Z2YwJ73MvZ/Lgk0/uMTpTv5FpT39Sv06/dWDG7rRwKklHjh
password is : wUF4htaMVai14p6kxPQiQ3BbpSI7GCjt0uA8XeMe7m/HoMnfdhwFOjJSgevpFZnK
这一步有多种方式,目的就是通过自定义的复杂的密钥,来加密敏感信息,这里的敏感信息是数据连接url, username, password。
4.修改配置文件application.properties,删掉密钥,修改数据库连接配置
ENC(秘文)
spring.datasource.url=ENC(c57K1C9qZFf/Y30dGcauCVwip7lTcMIX35oWjkAN6MPi+xucxmDXmFmOvf8LOXIq)
spring.datasource.username=ENC(kyMOHf2vr5LS2pjL2Z2YwJ73MvZ/Lgk0/uMTpTv5FpT39Sv06/dWDG7rRwKklHjh)
spring.datasource.password=ENC(wUF4htaMVai14p6kxPQiQ3BbpSI7GCjt0uA8XeMe7m/HoMnfdhwFOjJSgevpFZnK)
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
5.再次启动Spring Boot项目时,需要以参数方式传入密钥,否则会报错
启动Spring Boot项目时,传入参数如下
>mvn spring-boot:run -Dspring-boot.run.arguments=--jasypt.encryptor.password=EbfYkitulv73I2p0mXI50JMXoaxZTKJ7TYO0987
mvn 方式启动Spring Boot项目时,传入参数请参考
Spring-Boot 2.3.1 -Dspring-boot.run.arguments not working
6.在开发测试过程中,不删掉密钥,还是用 mvn spring-boot:run命令启动
在开发测试时,为了方便,不删掉密钥,还是用 mvn spring-boot:run命令启动,但是在上传到github时记得删掉密钥!!!