欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot加密配置文件方法介紹

 更新時間:2023年01月18日 08:30:24   作者:做網(wǎng)安的小王  
這篇文章主要介紹了SpringBoot加密配置文件,近期在對開發(fā)框架安全策略方面進行升級優(yōu)化,提供一些通用場景的解決方案,本文針對配置文件加密進行簡單的分享

在實踐中,項目的某些配置信息是需要進行加密處理的,以減少敏感信息泄露的風(fēng)險。比如,在使用Druid時,就可以基于它提供的公私鑰加密方式對數(shù)據(jù)庫的密碼進行加密。

但更多時候,比如Redis密碼、MQ密碼等敏感信息,也需要進行加密,此時就沒那么方便了。本篇文章給大家介紹一款Java類庫Jasypt,同時基于Spring Boot項目來演示一下如何對配置文件信息進行加密。

一個簡單的SpringBoot項目

我們先來創(chuàng)建一個簡單的Spring Boot項目,構(gòu)建一個加密數(shù)據(jù)運用的場景。

無論通過Idea或官網(wǎng)等方式,先創(chuàng)建一個Spring Boot項目,核心依賴為:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--  為了方便,通常會引入Lombok依賴  -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency> 

創(chuàng)建一個配置文件類ConfigProperties:

@Data
@Component
public class ConfigProperties {
?@Value("${conf.url}")private String url;
?@Value("${conf.password}")private String password;
} 

配置文件中的配置屬性注入到該類,以供后續(xù)使用。

創(chuàng)建一個Controller類,用來測試驗證,是否能夠正常運行:

@RestController
@RequestMapping("/")
public class ConfigController {
?@Resourceprivate ConfigProperties configProperties;
?@RequestMappingpublic void print(){System.out.println(configProperties.getUrl());System.out.println(configProperties.getPassword());}
} 

對應(yīng)ConfigProperties類,application.properties中配置如下:

conf.url=127.0.0.1
conf.password=admin123 

此時,啟動項目,訪問Controller,能夠正常打印出配置信息,說明程序可以正常運行。

但配置文件中直接明文展示了password項,如果別人看到該配置文件,就可能導(dǎo)致密碼的泄露。

基于Jasypt的加密

針對上述情況,通常,我們會對敏感信息進行加密,避免明文密碼信息暴露,提升安全等級。

加密的基本思路是:配置文件中存儲加密內(nèi)容,在解析配置文件注入時進行解密。

但如果拿到項目源碼,知道加密算法和秘鑰,肯定是可以解密的。這里的加密,只是多一層安全防護,但并不是萬能的。

下面看看如何基于Jasypt來進行加密處理。

集成步驟

下面基于上述Spring Boot項目進行改造升級。

環(huán)境準備

不同版本的Jasypt使用方法有所不同,這里基于3.0.4版本、JDK8、Spring Boot 2.5.5來進行演示。

在使用之前,首先檢查一下JDK8的JRE中是否安裝了不限長度的JCE版本,否則在執(zhí)行加密操作時會拋出解密失敗的異常。

進入$JAVA_HOME/jre/lib/security目錄,查看是否包含local_policy.jar和US_export_policy.jar兩個jar包。如果不包含,則通過Oracle官網(wǎng)進行下載,下載地址:https://pan.baidu.com/s/1pLUNUBvF6TWudeYcf5BNjA?pwd=qgk9。

下載文件為:jce_policy-8.zip

文件內(nèi)包含三個文件:

README.txt
local_policy.jar
US_export_policy.jar 

查看$JAVA_HOME/jre/lib/security目錄下是否有這兩個jar包文件,如果沒有則復(fù)制進去,如果有可考慮覆蓋。

引入依賴

在Spring Boot中集成Jasypt比較簡單,直接引入如下依賴即可:

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.4</version>
</dependency> 

此時,Jasypt組件自動配置便已經(jīng)生效,只需要對需要加密的數(shù)據(jù)進行處理了。

為了方便對密碼進行加密,還可以在pom.xml中的build元素中引入對應(yīng)的plugin,這個后面會用到:

<plugin><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-maven-plugin</artifactId><version>3.0.4</version>
</plugin> 

至此,所有的準備工作已經(jīng)完成。

內(nèi)容加密

內(nèi)容加密有多種方式,這里挑選兩種方式進行介紹。

方式一:單元測試類生成密文;

構(gòu)建如下單元測試類,使用默認實例化的StringEncryptor對密碼進行加密:

@SpringBootTest
class SpringBootJasyptApplicationTests {
?@Autowiredprivate StringEncryptor stringEncryptor;
?@Testvoid contextLoads() {String qwerty1234 = stringEncryptor.encrypt("admin123");System.out.println(qwerty1234);}
} 

其中,”admin123“便是要加密的內(nèi)容。執(zhí)行上述程序,便可打印加密后的內(nèi)容。這種形式加密的內(nèi)容,全部采用默認值。

方式二:通過Maven插件生成密文

在上面已經(jīng)引入了Jasypt的Maven插件,可通過對應(yīng)的命令進行生成密碼。

第一步:在配置文件中添加加密的密碼:

jasypt.encryptor.password=afx11 

然后對配置文件中需要加密的數(shù)據(jù)進行改造,在數(shù)據(jù)前添加”DEC(“,在數(shù)據(jù)尾部加上")",修改完如下:

conf.password=DEC(admin123) 

這里添加的DEC()是告訴插件,此部分內(nèi)容需要進行加密處理。注意這里關(guān)鍵字是DEC。

第二步:執(zhí)行Maven命令,對上述數(shù)據(jù)進行加密處理

在命令執(zhí)行以下命令:

mvn jasypt:encrypt -Djasypt.encryptor.password=afx11 

此時再看配置文件中的conf.password數(shù)據(jù)已經(jīng)變?yōu)椋?/p>

jasypt.encryptor.password=afx11
conf.url=127.0.0.1
conf.password=ENC(209eBdF3+jsV2f8kDjs4NOCzgBxnVgETlR5q2KfhYo5DW2jqvLknv0TndEkXOXm0) 

注意原來的DEC變成了ENC,原來的明文密碼變成了加密的密文。

此時,如果想查看明文,執(zhí)行以下命令即可:

mvn jasypt:decrypt -Djasypt.encryptor.password=afx11 

該命令不會修改配置文件中的密文為明文,只會在控制臺進行明文結(jié)果的輸出。

jasypt.encryptor.password=afx11
conf.url=127.0.0.1
conf.password=DEC(admin123) 

經(jīng)過上述操作,所有改造步驟已經(jīng)完成,只需啟動系統(tǒng)進行驗證即可。

密碼的傳遞方式

完成上述步驟,直接啟動系統(tǒng),訪問對應(yīng)的請求,會發(fā)現(xiàn)已經(jīng)能夠成功打印出密碼原文了。

上述實例中我們將加密的密碼放在了application.properties文件中,這樣并不安全,如果查看代碼就知道如何解密了。通常,還可以采用另外一種形式來傳遞參數(shù):在啟動命令中傳輸密碼。

比如:

 java -jar jasypt-spring-boot-demo-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=password 

這樣,密碼便不用存儲在代碼當中了,一定程度上增加了安全性。當然,也可以通過環(huán)境變量來進行傳遞,這樣即便開發(fā)人員也無法獲得生產(chǎn)的密碼。

到此這篇關(guān)于Spring Boot加密配置文件方法介紹的文章就介紹到這了,更多相關(guān)Spring Boot加密配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JPA多條件復(fù)雜SQL動態(tài)分頁查詢功能

    JPA多條件復(fù)雜SQL動態(tài)分頁查詢功能

    這篇文章主要介紹了JPA多條件復(fù)雜SQL動態(tài)分頁查詢功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 詳解Java語言中的抽象類與繼承

    詳解Java語言中的抽象類與繼承

    這篇文章主要為大家詳細介紹了Java語言中的抽象類與繼承的相關(guān)資料,文中的示例代碼講解詳細,對我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • 解決@FeignClient注入service失敗問題

    解決@FeignClient注入service失敗問題

    這篇文章主要介紹了解決@FeignClient注入service失敗問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法

    詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法

    本文主要介紹了詳解Java構(gòu)建樹結(jié)構(gòu)的公共方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題

    在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題

    這篇文章主要介紹了在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java lambda 循環(huán)累加求和代碼

    Java lambda 循環(huán)累加求和代碼

    這篇文章主要介紹了Java lambda 循環(huán)累加求和代碼,具有很的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java實現(xiàn)簡單注冊選擇所在城市

    java實現(xiàn)簡單注冊選擇所在城市

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單注冊選擇所在城市的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java 合并多個MP4視頻文件

    Java 合并多個MP4視頻文件

    這篇文章主要介紹了Java 合并多個MP4視頻文件的方法,幫助大家利用Java處理視頻,提高辦公效率,感興趣的朋友可以了解下
    2020-11-11
  • 詳細解讀Java編程中面向字符的輸入流

    詳細解讀Java編程中面向字符的輸入流

    這篇文章主要介紹了Java中面向字符的輸入和輸出流,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • 劍指Offer之Java算法習(xí)題精講鏈表專項訓(xùn)練

    劍指Offer之Java算法習(xí)題精講鏈表專項訓(xùn)練

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03

最新評論