SpringBoot實(shí)現(xiàn)application.yml文件敏感信息加密
在我們傳統(tǒng)的基于SpringBoot開發(fā)的項(xiàng)目中,在配置文件里,或多或少的都會(huì)有一些敏感信息,這樣就會(huì)丟失一定的安全性,所以我們就需要,對敏感信息進(jìn)行加密。我們可以使用jasypt工具進(jìn)行加密。
好了廢話不多少,直接進(jìn)入正題:
1. 導(dǎo)入依賴
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>我的Demo里使用的是SpringBoot3.0之后的版本,所以大家如果像我一樣都是基于SpringBoot3.0之后的,jasypt一定要使用3.0.5以后的版本。
2. 使用jasypt
我們在配置文件里寫幾行配置
jasypt:
encryptor:
password: sdjsdbshdbfuasd
property:
prefix: ENC(
suffix: )password是加密密碼,必須配置這一項(xiàng),值可以隨便輸入。
prefix和suffix是默認(rèn)配置,也可以自定義,默認(rèn)值就是ENC(和),這個(gè)是自動(dòng)解密使用的。
2.1. 加/解密
jasypt 提供了一個(gè)工具類接口,StringEncryptor,這個(gè)接口提供了加解密方法。下面是他的源碼。
public interface StringEncryptor { ?
? ? /** ?
? ? * 加密輸入信息 ?
? ? * ?
? ? * @param 要加密的信息 ?
? ? * @return 加密結(jié)果 ?
? ? */ ?
? ? public String encrypt(String message); ?
? ? /** ?
? ? * 解密加密信息 ?
? ? * ?
? ? * @param 加密信息(encryptedMessage) 要解密的加密信息 ?
? ? * @return 解密結(jié)果 ?
? ? */ ?
? ? public String decrypt(String encryptedMessage); ?
}我們在 test 測試類中,將要進(jìn)行加密的文本使用encrypt方法進(jìn)行加密
@SpringBootTest ?
@Slf4j ?
class JasryptApplicationTests { ?
? ? @Autowired ?
? ? private StringEncryptor stringEncryptor; ?
? ? @Test ?
? ? void contextLoads() { ?
? ? ? ? String username = stringEncryptor.encrypt("root"); ?
? ? ? ? String password = stringEncryptor.encrypt("root"); ?
? ? ? ? log.info("username encrypt is {}", username); ?
? ? ? ? log.info("password encrypt is {}", password); ?
? ? ? ? log.info("username decrypt is {}", stringEncryptor.decrypt(username)); ?
? ? ? ? log.info("password decrypt is {}", stringEncryptor.decrypt(password)); ?
? ? } ?
}上邊代碼,加密的內(nèi)容是,MySQL的用戶名和密碼,同時(shí)對它們進(jìn)行加密和解密,你當(dāng)然可以對任意配置信息進(jìn)行加解密操作??纯摧敵鰞?nèi)容:
2023-07-23T18:59:50.621+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username encrypt is 61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot
2023-07-23T18:59:50.621+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password encrypt is a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv
2023-07-23T18:59:50.623+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : username decrypt is root
2023-07-23T18:59:50.630+08:00 INFO 9489 --- [ main] c.e.jasrypt.JasryptApplicationTests : password decrypt is root
加密默認(rèn)使用的是PBEWITHHMACSHA512ANDAES_256加密
我們將密文,替換到數(shù)據(jù)源,配置:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/honey?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8 username: ENC(61zSoixtNayUruXt5x84kEKO9jGnZObTGCa1+k5Yg9F7qSUiZvp5fG31AMuVqrot) password: ENC(a6snCZCkbQFKkQqxN2bS18ags04yZxH+THwIL5RjGocEjG9sLkJvvasPFFVxEBWv)
注意別忘了加上前綴和后綴,如上邊代碼。
這個(gè)時(shí)候就已經(jīng)完成了,但是官方不建議我們將加密密碼放到配置文件中,我們應(yīng)作為系統(tǒng)屬性、命令行參數(shù)或環(huán)境變量傳遞,只要其名稱是 jasypt.encryptor.password,就能正常工作。
我們可以將項(xiàng)目打?yàn)閖ar包然后使用 java -jar命令
java -jar jasrypt-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=加密密碼
加密密碼必須與之前給屬性加密時(shí)用的加密密碼一致。
3. 結(jié)尾
到此這篇關(guān)于SpringBoot實(shí)現(xiàn)application.yml文件敏感信息加密的文章就介紹到這了,更多相關(guān)SpringBoot application.yml敏感信息加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot 多數(shù)據(jù)源的實(shí)現(xiàn)(最簡單的整合方式)
這篇文章主要介紹了springboot 多數(shù)據(jù)源的實(shí)現(xiàn)(最簡單的整合方式),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Java NIO Path接口和Files類配合操作文件的實(shí)例
下面小編就為大家分享一篇Java NIO Path接口和Files類配合操作文件的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
java中的instanceof關(guān)鍵字詳細(xì)解讀
這篇文章主要介紹了java中的instanceof關(guān)鍵字詳細(xì)解讀,instanceof 是 Java 的保留關(guān)鍵字,它的作用是測試它左邊的對象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型,需要的朋友可以參考下2024-01-01
詳細(xì)介紹使用Java調(diào)用Python的四種方法
這篇文章主要給大家介紹了關(guān)于使用Java調(diào)用Python的四種方法,每種方法根據(jù)實(shí)際項(xiàng)目需求有其適用場景,其中,推薦使用Runtime.getRuntime()方法,因?yàn)樗鼮楹啙嵡乙子趯?shí)現(xiàn),需要的朋友可以參考下2024-10-10

