本文參考,請參考原文
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時記得刪掉密鑰!!!