關(guān)于Spring Boot配置文件中的各種細節(jié)用法有很多,比如:參數(shù)間的引用open in new window、隨機數(shù)的應(yīng)用open in new window等等。這些配置相關(guān)的知識都是Spring Boot原生就提供的,而今天我們將介紹的功能并非Spring Boot原生就支持,但卻非常有用:配置內(nèi)容的加密。
為什么要加密?
可能很多初學者,對于配置信息的加密并不敏感,因為開始主要接觸本地的開發(fā),對于很多安全問題并沒有太多的考慮。而現(xiàn)實中,我們的配置文件中,其實包含著大量與安全相關(guān)的敏感信息,比如:數(shù)據(jù)庫的賬號密碼、一些服務(wù)的密鑰等。這些信息一旦泄露,對于企業(yè)的重要數(shù)據(jù)資產(chǎn),那是相當危險的。 所以,對于這些配置文件中存在的敏感信息進行加密,是每個成熟開發(fā)團隊都一定會去的事。
所以今天我們就主要來說說,當我們只使用Spring Boot的時候,如何實現(xiàn)對配置中敏感信息的加密。
動手試試
下面我們將使用https://github.com/ulisesbocchio/jasypt-spring-boot
這個開源項目提供的實現(xiàn)和插件,來幫助我們輕松的完成配置信息的加密。
趕緊跟著我下面的步驟動手試試吧!
第一步:創(chuàng)建一個基礎(chǔ)的Spring Boot項目(如果您還不會,可以參考這篇文章:快速入門open in new window
第二步:設(shè)計一個參數(shù)和單元測試,用來輸出這個配置信息
準備加密的配置:
datasource.password=didispace.com
用來輸出配置信息的單元測試:
@Slf4j
@SpringBootTest
public class PropertiesTest {
@Value("${datasource.password:}")
private String password;
@Test
public void test() {
log.info("datasource.password : {}", password);
}
}
執(zhí)行這個單元測試,會輸出:
2021-08-13 22:28:45.506 INFO 70405 --- [ main] com.didispace.chapter15.PropertiesTest : datasource.password : didispace.com
這里還沒開始加密,下面我們開始引入加密的操作!
第三步:在pom.xml
中引入jasypt提供的Spring Boot Starter
com.github.ulisesbocchio
jasypt-spring-boot-starter
3.0.3
在插件配置中加入:
com.github.ulisesbocchio
jasypt-maven-plugin
3.0.3
第四步:在配置文件中加入加密需要使用的密碼
jasypt.encryptor.password=didispace
同時,修改要加密的內(nèi)容,用DEC()將待加密內(nèi)容包裹起來,比如:
datasource.password=DEC(didispace.com)
第五步:使用jasypt-maven-plugin
插件來給DEC()
包裹的內(nèi)容實現(xiàn)批量加密。
在終端中執(zhí)行下面的命令:
mvn jasypt:encrypt -Djasypt.encryptor.password=didispace
注意:這里-Djasypt.encryptor.password參數(shù)必須與配置文件中的一致,不然后面會解密失敗。
執(zhí)行之后,重新查看配置文件,可以看到,自動變成了
datasource.password=ENC(/AL9nJENCYCh9Pfzdf2xLPsqOZ6HwNgQ3AnMybFAMeOM5GphZlOK6PxzozwtCm+Q)
jasypt.encryptor.password=didispace
其中,ENC()
跟DEC()
一樣都是jasypt提供的標識,分別用來標識括號內(nèi)的是加密后的內(nèi)容和待加密的內(nèi)容。
如果當前配置文件已經(jīng)都是ENC()
內(nèi)容了,那么我們可以通過下面的命令來解密配置文件,查看原始信息:
mvn jasypt:decrypt -Djasypt.encryptor.password=didispace
該操作不會修改配置文件,只會在控制臺輸出解密結(jié)果,比如:
datasource.password=DEC(didispace.com)
jasypt.encryptor.password=didispace
第六步:此時,我們的配置文件中的敏感信息已經(jīng)被ENC()修飾了,再執(zhí)行一下單元測試,不出意外的話,依然可以得到之前一樣的結(jié)果:
2021-08-13 22:50:00.463 INFO 76150 --- [ main] com.didispace.chapter15.PropertiesTest : datasource.password : didispace.com
而此時,配置文件中已經(jīng)是加密內(nèi)容了,敏感信息得到了保護。
注意:如果在嘗試的時候,出現(xiàn)報錯:DecryptionException: Unable to decrypt,點擊本文查看可能的原因open in new window
注:本文轉(zhuǎn)載自“程序猿DD”,如有侵權(quán),請聯(lián)系刪除!