成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何輕松給Spring Boot配置文件加個(gè)密?

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

[[426753]]

本文轉(zhuǎn)載自微信公眾號「程序新視界」,作者二師兄。轉(zhuǎn)載本文請聯(lián)系程序新視界公眾號。

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

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

一個(gè)簡單的SpringBoot項(xiàng)目

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

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

  1. <dependency> 
  2.  <groupId>org.springframework.boot</groupId> 
  3.  <artifactId>spring-boot-starter-web</artifactId> 
  4. </dependency> 
  5. <!--    為了方便,通常會(huì)引入Lombok依賴    --> 
  6. <dependency> 
  7.  <groupId>org.projectlombok</groupId> 
  8.  <artifactId>lombok</artifactId> 
  9. </dependency> 

 

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

  1. @Data 
  2. @Component 
  3. public class ConfigProperties { 
  4.  
  5.  @Value("${conf.url}"
  6.  private String url; 
  7.  
  8.  @Value("${conf.password}"
  9.  private String password
  10.  

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

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

  1. @RestController 
  2. @RequestMapping("/"
  3. public class ConfigController { 
  4.  
  5.  @Resource 
  6.  private ConfigProperties configProperties; 
  7.  
  8.  @RequestMapping 
  9.  public void print(){ 
  10.   System.out.println(configProperties.getUrl()); 
  11.   System.out.println(configProperties.getPassword()); 
  12.  } 

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

  1. conf.url=127.0.0.1 
  2. conf.password=admin123 

此時(shí),啟動(dòng)項(xiàng)目,訪問Controller,能夠正常打印出配置信息,說明程序可以正常運(yùn)行。

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

基于Jasypt的加密

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

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

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

下面看看如何基于Jasypt來進(jìn)行加密處理。

集成步驟

下面基于上述Spring Boot項(xiàng)目進(jìn)行改造升級。

環(huán)境準(zhǔn)備

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

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

進(jìn)入$JAVA_HOME/jre/lib/security目錄,查看是否包含local_policy.jar和US_export_policy.jar兩個(gè)jar包。如果不包含,則通過Oracle官網(wǎng)進(jìn)行下載,下載地址:https://www.oracle.com/java/technologies/javase-jce8-downloads.html。

下載文件為:jce_policy-8.zip

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

  1. README.txt 
  2. local_policy.jar 
  3. US_export_policy.jar 

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

引入依賴

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

  1. <dependency> 
  2.     <groupId>com.github.ulisesbocchio</groupId> 
  3.     <artifactId>jasypt-spring-boot-starter</artifactId> 
  4.     <version>3.0.4</version> 
  5. </dependency> 

 

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

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

  1. <plugin> 
  2.  <groupId>com.github.ulisesbocchio</groupId> 
  3.  <artifactId>jasypt-maven-plugin</artifactId> 
  4.  <version>3.0.4</version> 
  5. </plugin> 

 

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

內(nèi)容加密

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

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

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

  1. @SpringBootTest 
  2. class SpringBootJasyptApplicationTests { 
  3.  
  4.  @Autowired 
  5.  private StringEncryptor stringEncryptor; 
  6.  
  7.  @Test 
  8.  void contextLoads() { 
  9.   String qwerty1234 = stringEncryptor.encrypt("admin123"); 
  10.   System.out.println(qwerty1234); 
  11.  } 

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

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

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

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

  1. jasypt.encryptor.password=afx11 

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

  1. conf.password=DEC(admin123) 

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

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

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

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

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

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

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

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

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

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

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

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

密碼的傳遞方式

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

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

比如:

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

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

小結(jié)

關(guān)于Jasypt的使用及與Spring Boot的集成就講這么多,更多內(nèi)容也可參考官方文檔說明。如果你的項(xiàng)目中還存在很多明文存儲的密碼,真的有必要考慮使用類似的框架進(jìn)行加密處理了。

示例源碼地址:https://github.com/secbr/springboot-all/tree/master/springboot-jasypt

官方源碼地址:https://github.com/ulisesbocchio/jasypt-spring-boot

 

責(zé)任編輯:武曉燕 來源: 程序新視界
相關(guān)推薦

2009-11-17 16:46:01

PHP配置文件

2022-11-16 10:39:30

Spring配置文件生效

2024-04-23 14:13:38

開發(fā)配置文件

2009-06-17 14:10:30

Spring配置文件

2022-06-23 08:42:08

配置加密解密

2024-10-10 15:08:40

2023-11-01 08:30:20

SpringYAML

2025-01-26 00:00:40

微服務(wù)架構(gòu)服務(wù)

2021-08-06 08:04:14

Spring Boot自動(dòng)配置

2020-04-23 15:59:04

SpringKafka集群

2018-03-12 09:52:22

Linux命令rm

2022-04-28 09:46:20

Nginx文件Linux

2024-06-11 08:30:25

Quartz.NET開源任務(wù)調(diào)度庫

2024-01-19 13:40:00

TOML庫TomliPytoml

2017-03-23 09:29:06

2025-05-13 07:13:25

2024-08-09 08:52:26

2021-11-07 14:00:16

JekyllBashAPI后端

2021-01-06 10:09:05

Spring Boothttps sslhttps

2022-04-27 08:55:01

Spring外部化配置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本久久精品 | 亚洲综合色自拍一区 | av在线播放国产 | 成人高清在线视频 | 自拍偷拍欧美 | 精精国产xxxx视频在线播放 | 欧美伊人 | 91久久精品日日躁夜夜躁欧美 | 色伊人| 国产精品国产a级 | www国产成人免费观看视频,深夜成人网 | 伊人精品一区二区三区 | 成人h视频 | 精品一二三区在线观看 | 国产电影一区二区在线观看 | 国产乱码精品一区二区三区忘忧草 | 中文字幕二区 | 亚洲国产精品人人爽夜夜爽 | 久久久久久久国产 | 欧美激情国产精品 | 我爱操| 在线观看国产视频 | 国产91在线 | 欧美 | 久久久高清 | 午夜视频在线免费观看 | 久久成人高清视频 | 久久国产一区 | 99热在线观看精品 | 国产精品自拍视频 | 成人视屏在线观看 | 亚洲精品自在在线观看 | 欧洲精品在线观看 | 九九亚洲 | 黄色一级特级片 | 国产在线中文 | 欧美一级视频免费看 | 国产成人99久久亚洲综合精品 | 亚洲黄色一级毛片 | 午夜久久久| 久久精品视频播放 | 日韩av一区二区在线观看 |