<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot 配置中的敏感信息如何保護(hù)?

          共 4378字,需瀏覽 9分鐘

           ·

          2021-08-20 01:59

          在之前的系列教程中,我們已經(jīng)介紹了非常多關(guān)于Spring Boot配置文件中的各種細(xì)節(jié)用法,比如:參數(shù)間的引用隨機(jī)數(shù)的應(yīng)用命令行參數(shù)的使用多環(huán)境的配置管理等等。

          這些配置相關(guān)的知識(shí)都是Spring Boot原生就提供的,而今天我們將介紹的功能并非Spring Boot原生就支持,但卻非常有用:配置內(nèi)容的加密

          為什么要加密?

          可能很多初學(xué)者,對(duì)于配置信息的加密并不敏感,因?yàn)殚_(kāi)始主要接觸本地的開(kāi)發(fā),對(duì)于很多安全問(wèn)題并沒(méi)有太多的考慮。而現(xiàn)實(shí)中,我們的配置文件中,其實(shí)包含著大量與安全相關(guān)的敏感信息,比如:數(shù)據(jù)庫(kù)的賬號(hào)密碼、一些服務(wù)的密鑰等。這些信息一旦泄露,對(duì)于企業(yè)的重要數(shù)據(jù)資產(chǎn),那是相當(dāng)危險(xiǎn)的。所以,對(duì)于這些配置文件中存在的敏感信息進(jìn)行加密,是每個(gè)成熟開(kāi)發(fā)團(tuán)隊(duì)都一定會(huì)去的事。

          如果您是DD的老讀者,也許馬上會(huì)想到Spring Cloud Config就提供配置的加密功能,之前在我的Spring Cloud系列教程和《Spring Cloud微服務(wù)實(shí)戰(zhàn)》一書(shū)中都有詳細(xì)的介紹,感興趣的話可以點(diǎn)擊《Spring Cloud構(gòu)建微服務(wù)架構(gòu):分布式配置中心(加密解密)》(https://blog.didispace.com/spring-cloud-starter-dalston-3-2/)一探究竟。

          既然以前寫(xiě)過(guò)類似內(nèi)容,那為什么還要寫(xiě)呢?因?yàn)椴⒉皇撬械拈_(kāi)發(fā)場(chǎng)景都會(huì)搭建Spring Cloud的那套基礎(chǔ)設(shè)施,同時(shí)也不一定會(huì)使用Spring Cloud Config作為配置中心。所以,本文主要說(shuō)說(shuō),當(dāng)我們只使用Spring Boot的時(shí)候,如何實(shí)現(xiàn)對(duì)配置中敏感信息的加密。

          動(dòng)手試試

          下面我們將使用https://github.com/ulisesbocchio/jasypt-spring-boot這個(gè)開(kāi)源項(xiàng)目提供的實(shí)現(xiàn)和插件,來(lái)幫助我們輕松的完成配置信息的加密。

          趕緊跟著我下面的步驟動(dòng)手試試吧!

          第一步:創(chuàng)建一個(gè)基礎(chǔ)的Spring Boot項(xiàng)目(如果您還不會(huì),可以參考這篇文章:快速入門(https://blog.didispace.com/spring-boot-learning-21-1-1/)

          第二步:設(shè)計(jì)一個(gè)參數(shù)和單元測(cè)試,用來(lái)輸出這個(gè)配置信息

          準(zhǔn)備加密的配置:

          datasource.password=didispace.com

          用來(lái)輸出配置信息的單元測(cè)試:

          @Slf4j
          @SpringBootTest
          public class PropertiesTest {

              @Value("${datasource.password:}")
              private String password;

              @Test
              public void test() {
                  log.info("datasource.password : {}", password);
              }

          }

          執(zhí)行這個(gè)單元測(cè)試,會(huì)輸出:

          2021-08-13 22:28:45.506  INFO 70405 --- [           main] com.didispace.chapter15.PropertiesTest   : datasource.password : didispace.com

          這里還沒(méi)開(kāi)始加密,下面我們開(kāi)始引入加密的操作!

          第三步:在pom.xml中引入jasypt提供的Spring Boot Starter

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

          在插件配置中加入:

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

          第四步:在配置文件中加入加密需要使用的密碼

          jasypt.encryptor.password=didispace

          同時(shí),修改要加密的內(nèi)容,用DEC()將待加密內(nèi)容包裹起來(lái),比如:

          datasource.password=DEC(didispace.com)

          第五步:使用jasypt-maven-plugin插件來(lái)給DEC()包裹的內(nèi)容實(shí)現(xiàn)批量加密。

          在終端中執(zhí)行下面的命令:

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

          注意:這里-Djasypt.encryptor.password參數(shù)必須與配置文件中的一致,不然后面會(huì)解密失敗。

          執(zhí)行之后,重新查看配置文件,可以看到,自動(dòng)變成了

          datasource.password=ENC(/AL9nJENCYCh9Pfzdf2xLPsqOZ6HwNgQ3AnMybFAMeOM5GphZlOK6PxzozwtCm+Q)

          jasypt.encryptor.password=didispace

          其中,ENC()DEC()一樣都是jasypt提供的標(biāo)識(shí),分別用來(lái)標(biāo)識(shí)括號(hào)內(nèi)的是加密后的內(nèi)容和待加密的內(nèi)容。

          如果當(dāng)前配置文件已經(jīng)都是ENC()內(nèi)容了,那么我們可以通過(guò)下面的命令來(lái)解密配置文件,查看原始信息:

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

          該操作不會(huì)修改配置文件,只會(huì)在控制臺(tái)輸出解密結(jié)果,比如:

          datasource.password=DEC(didispace.com)

          jasypt.encryptor.password=didispace

          第六步:此時(shí),我們的配置文件中的敏感信息已經(jīng)被ENC()修飾了,再執(zhí)行一下單元測(cè)試,不出意外的話,依然可以得到之前一樣的結(jié)果:

          2021-08-13 22:50:00.463  INFO 76150 --- [           main] com.didispace.chapter15.PropertiesTest   : datasource.password : didispace.com

          而此時(shí),配置文件中已經(jīng)是加密內(nèi)容了,敏感信息得到了保護(hù)。

          進(jìn)一步思考

          根據(jù)上面的步驟,愛(ài)思考的你,也許會(huì)發(fā)現(xiàn)這樣的問(wèn)題:雖然敏感信息是加密了,但是我們通過(guò)配置文件也能看到jasypt.encryptor.password信息,我們是不是通過(guò)利用這個(gè)再把原始信息解密出來(lái),這樣的話豈不是還是不安全?

          上面的實(shí)現(xiàn)方式的確是會(huì)有這樣的問(wèn)題!所以,在實(shí)際應(yīng)用的過(guò)程中,jasypt.encryptor.password的配置,可以通過(guò)運(yùn)維小伙伴在環(huán)境變量或啟動(dòng)參數(shù)中注入,而不是由開(kāi)發(fā)人員在配置文件中指定。

          同時(shí),為了應(yīng)對(duì)更高的安全要求,jasypt也提供自定義的加密解密方式,這里就不做具體展開(kāi)了,有興趣的小伙伴可以前往jasypt的倉(cāng)庫(kù)(https://github.com/ulisesbocchio/jasypt-spring-boot)查看使用細(xì)節(jié)。

          本系列教程《Spring Boot 2.x基礎(chǔ)教程》http://blog.didispace.com/spring-boot-learning-2x/ ,歡迎收藏與轉(zhuǎn)發(fā)!

          如果學(xué)習(xí)過(guò)程中如遇困難?可以加入我們Spring技術(shù)交流群,參與交流與討論,更好的學(xué)習(xí)與進(jìn)步!

          點(diǎn)擊卡片關(guān)注,回復(fù):加群

          代碼示例

          本文的完整工程可以查看下面?zhèn)}庫(kù)中2.x目錄下的chapter1-5工程:

          • Github:https://github.com/dyc87112/SpringBoot-Learning/(https://github.com/dyc87112/SpringBoot-Learning/tree/master/2.x)
          • Gitee:https://gitee.com/didispace/SpringBoot-Learning/(https://gitee.com/didispace/SpringBoot-Learning/tree/master/2.x)

          如果您覺(jué)得本文不錯(cuò),歡迎Star支持,您的關(guān)注是我堅(jiān)持的動(dòng)力!


          往期推薦

          混合辦公時(shí)代來(lái)了?攜程試點(diǎn)每周兩天居家辦公,76%的員工主動(dòng)報(bào)名!

          騰訊年度性愛(ài)報(bào)告發(fā)布,最后一條數(shù)據(jù)羞愧了...

          攤牌了,這些全是假的!埋了4個(gè)月的彩蛋都沒(méi)被發(fā)現(xiàn)...

          Stack Overflow 最火的一段代碼竟然有 Bug...

          居然有人提問(wèn)“國(guó)家何時(shí)整治程序員的高薪現(xiàn)象”?

          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜臀av无码精品一区二区三区 | 日韩人妻久久亚洲 | 日本精品一区二区三区视频 | 11一12周岁女毛片 | 青青青青青青草草草草草草草视频 |