日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

SpringCloud敏感信息配置揭秘,教你防止信息泄露!

來(lái)源: 責(zé)編: 時(shí)間:2023-11-02 17:14:11 303觀看
導(dǎo)讀環(huán)境:SpringBoot2.7.12 + SpringCloud2021.0.7 + JDK171. 簡(jiǎn)介在Spring Boot中,配置文件通常包含了應(yīng)用程序的敏感信息,例如數(shù)據(jù)庫(kù)密碼、API密鑰、加密密鑰等。如果這些敏感信息未經(jīng)過(guò)加密處理,一旦配置文件被泄露或被不

環(huán)境:SpringBoot2.7.12 + SpringCloud2021.0.7 + JDK17F6s28資訊網(wǎng)——每日最新資訊28at.com

1. 簡(jiǎn)介

在Spring Boot中,配置文件通常包含了應(yīng)用程序的敏感信息,例如數(shù)據(jù)庫(kù)密碼、API密鑰、加密密鑰等。如果這些敏感信息未經(jīng)過(guò)加密處理,一旦配置文件被泄露或被不當(dāng)訪問(wèn),可能會(huì)導(dǎo)致安全風(fēng)險(xiǎn)和潛在的惡意行為。因此,對(duì)Spring Boot配置文件中的敏感信息進(jìn)行加密處理是非常必要的。F6s28資訊網(wǎng)——每日最新資訊28at.com

敏感信息加密的目的是保護(hù)數(shù)據(jù)的安全性和完整性,防止未經(jīng)授權(quán)的訪問(wèn)和泄露。通過(guò)加密敏感信息,可以確保只有經(jīng)過(guò)授權(quán)的用戶(hù)或系統(tǒng)可以解密和訪問(wèn)這些信息。即使配置文件被泄露,攻擊者也無(wú)法輕易地獲取敏感信息的真實(shí)內(nèi)容,從而降低了安全風(fēng)險(xiǎn)。F6s28資訊網(wǎng)——每日最新資訊28at.com

目前在項(xiàng)目中用的比較多的應(yīng)該是Jasypt,Jasypt是一個(gè)Java加密工具包,它簡(jiǎn)化了對(duì)密碼的哈希加密、對(duì)文本和二進(jìn)制數(shù)據(jù)的對(duì)稱(chēng)加解密等任務(wù)。在Spring Boot中,Jasypt可以用來(lái)對(duì)配置文件中的密鑰進(jìn)行加密存儲(chǔ),它支持基于標(biāo)準(zhǔn)的高安全性加密技術(shù),適用于單向和雙向加密。F6s28資訊網(wǎng)——每日最新資訊28at.com

本篇我們不會(huì)去介紹Jasypt如何使用。如果你的項(xiàng)目中已經(jīng)使用到了SpringCloud那么SpringCloud已經(jīng)為我們提供了配置文件內(nèi)容加解密的處理方法;即時(shí)你的項(xiàng)目中沒(méi)有用到,我們也只需要引入核心包即可使用它的這塊功能。接下來(lái)將以實(shí)例一步一步的交你如何使用。F6s28資訊網(wǎng)——每日最新資訊28at.com

2. 加解密配置

  • 引入依賴(lài)
<properties>  <java.version>17</java.version>  <spring-cloud.version>2021.0.7</spring-cloud.version></properties><dependencies>  <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-context</artifactId>    <version>${spring-cloud.version}</version>  </dependency></dependencies>
  • 配置密鑰信息
spring:  cloud:    bootstrap:      enabled: false # 這里必須是false,默認(rèn)是false。---#加密配置encrypt:  #密鑰  key: aaaabbbbccccdddd  #加密處理時(shí)的加鹽信息  salt: dead
  • 加密敏感信息
// 通過(guò)如下方式將我們需要加密的內(nèi)容進(jìn)行加密,如:123123!@ 。進(jìn)行加密處理TextEncryptor textEncryptor = new EncryptorFactory("dead").create("aaaabbbbccccdddd") ;System.out.println(textEncryptor.encrypt("123123!@")) ;
  • 配置文件中配置加密內(nèi)容
db:  password: '{cipher}6c05a3e62aa1f71b814fd283fc15197ec18a83b67d9da27dcb63c1b3925d68c1'

注意:這里的前綴必須是:{cipher}F6s28資訊網(wǎng)——每日最新資訊28at.com

通過(guò)以上的配置,我們的配置也是完全可以正常工作的,測(cè)試如下:F6s28資訊網(wǎng)——每日最新資訊28at.com

public class SpringCloudComprehensiveApplication implements ApplicationRunner{  @Value("${db.password}")  private String pwd ;  public static void main(String[] args) {    SpringApplication.run(SpringCloudComprehensiveApplication.class, args);  }  @Override  public void run(ApplicationArguments args) throws Exception {    System.out.println(pwd) ;  }}

輸出結(jié)果:F6s28資訊網(wǎng)——每日最新資訊28at.com

123123!@

正確的輸出了結(jié)果。F6s28資訊網(wǎng)——每日最新資訊28at.com

到此配置文件敏感信息加密就完成了。但是發(fā)現(xiàn)我們非常重要的密鑰信息還是存在配置文件中,這樣還是和沒(méi)加密一樣啊,還是暴露了。我們可以通過(guò)命令行的方式來(lái)設(shè)置密鑰信息。F6s28資訊網(wǎng)——每日最新資訊28at.com

  1. 從配置文件中刪除配置的encrypt.key和encrypt.salt兩個(gè)配置。
  2. 啟動(dòng)項(xiàng)目時(shí)指定命令行參數(shù),如下:
java -jar xxx.jar --encrypt.key=aaaabbbbccccdddd --encrypt.salt=dead

通過(guò)這樣設(shè)置,我們的程序也將正常的運(yùn)行。其實(shí)命令行參數(shù)在程序運(yùn)行過(guò)程中會(huì)自動(dòng)的將這些信息添加到Environment中。F6s28資訊網(wǎng)——每日最新資訊28at.com

3. 實(shí)現(xiàn)原理F6s28資訊網(wǎng)——每日最新資訊28at.com

spring cloud context中提供了下面一個(gè)配置類(lèi),該配置類(lèi)配置了一個(gè)ApplicationInitializer應(yīng)用程序初始化類(lèi),也就是ApplicationContext容器初始化前執(zhí)行的(Environment準(zhǔn)備完之后)。F6s28資訊網(wǎng)——每日最新資訊28at.com

注意:這里是當(dāng)我們項(xiàng)目中使用了配置中心,如使用了nacos的配置中心時(shí)
F6s28資訊網(wǎng)——每日最新資訊28at.com

public class EncryptionBootstrapConfiguration {  @Bean  public EnvironmentDecryptApplicationInitializer environmentDecryptApplicationListener(      ConfigurableApplicationContext context, KeyProperties keyProperties) {    TextEncryptor encryptor;    try {      // 我們完全可以自定義一個(gè)TextEncryptor類(lèi)型的Bean,自己來(lái)實(shí)現(xiàn)加解密邏輯      encryptor = context.getBean(TextEncryptor.class);    }    EnvironmentDecryptApplicationInitializer listener = new EnvironmentDecryptApplicationInitializer(encryptor);    return listener;  }}

EnvironmentDecryptApplicationInitializer 類(lèi)會(huì)解密我們的配置信息F6s28資訊網(wǎng)——每日最新資訊28at.com

public class EnvironmentDecryptApplicationInitializer {  private TextEncryptor encryptor;  public EnvironmentDecryptApplicationInitializer(TextEncryptor encryptor) {    this.encryptor = encryptor;  }  public void initialize(ConfigurableApplicationContext applicationContext) {     MutablePropertySources propertySources = environment.getPropertySources();    // ...    // 解密配置文件    Map<String, Object> map = decrypt(this.encryptor, propertySources);  }}

當(dāng)我們項(xiàng)目中沒(méi)有啟用配置中心時(shí),使用的是另外一個(gè)EnvironmentPostProcessor。F6s28資訊網(wǎng)——每日最新資訊28at.com

public class DecryptEnvironmentPostProcessor extends AbstractEnvironmentDecrypt    implements EnvironmentPostProcessor, Ordered {  public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {    // 如果啟用了,則該處理器不會(huì)生效。    if (bootstrapEnabled(environment) || useLegacyProcessing(environment) || !isEnabled(environment)) {      return;    }    MutablePropertySources propertySources = environment.getPropertySources();    // 解密配置文件    Map<String, Object> map = TextEncryptorUtils.decrypt(this, environment, propertySources);  }}

了解了上面的源碼實(shí)現(xiàn),其實(shí)我們自己也可以借鑒它的實(shí)現(xiàn)方式來(lái)實(shí)現(xiàn)自己的配置文件處理。F6s28資訊網(wǎng)——每日最新資訊28at.com

注:配置文件的加解密也是支持RSA這種非對(duì)稱(chēng)算法的,有興趣可以了解下,也是非常的簡(jiǎn)單。
F6s28資訊網(wǎng)——每日最新資訊28at.com

完畢!!!F6s28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-16644-0.htmlSpringCloud敏感信息配置揭秘,教你防止信息泄露!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 使用Docker Compose編排多個(gè)容器

下一篇: 哥,我還是不懂 ThreadLocal

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • Redmi Pad評(píng)測(cè):紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍(lán)牙耳機(jī)到筆記本電腦,紅米不知不覺(jué)之間也已經(jīng)形成了自己頗有競(jìng)爭(zhēng)力的產(chǎn)品體系,在中端和次旗艦市場(chǎng)上甚至要比小米新機(jī)的表現(xiàn)來(lái)得更好,正所謂“大丈夫生居
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來(lái)救

    沒(méi)有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒(méi)有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動(dòng),畢竟蘋(píng)果新品的發(fā)布節(jié)奏就是這樣的,一年下來(lái)也就幾個(gè)移動(dòng)端新品,不會(huì)像安卓廠商,一
  • K6:面向開(kāi)發(fā)人員的現(xiàn)代負(fù)載測(cè)試工具

    K6 是一個(gè)開(kāi)源負(fù)載測(cè)試工具,可以輕松編寫(xiě)、運(yùn)行和分析性能測(cè)試。它建立在 Go 和 JavaScript 之上,它被設(shè)計(jì)為功能強(qiáng)大、可擴(kuò)展且易于使用。k6 可用于測(cè)試各種應(yīng)用程序,包括 Web
  • 這款新興工具平臺(tái),讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來(lái)越多,但是處理信息的效率卻成為一個(gè)瓶頸。于是各種工具應(yīng)運(yùn)而生,都在爭(zhēng)相解決我們的工作效率問(wèn)題。今天我要給大家介紹一款效率
  • Python異步IO編程的進(jìn)程/線程通信實(shí)現(xiàn)

    這篇文章再講3種方式,同時(shí)講4中進(jìn)程間通信的方式一、 Python 中線程間通信的實(shí)現(xiàn)方式共享變量共享變量是多個(gè)線程可以共同訪問(wèn)的變量。在Python中,可以使用threading模塊中的L
  • 網(wǎng)紅炒股不為了賺錢(qián),那就是耍流氓!

    來(lái)源:首席商業(yè)評(píng)論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財(cái)經(jīng)媒體峰會(huì)上,幾個(gè)財(cái)經(jīng)圈媒體大佬就&ldquo;胡錫進(jìn)炒股是否知道認(rèn)真報(bào)道&rdquo;展開(kāi)討論。有
  • iQOO Neo8 Pro搶先上架:首發(fā)天璣9200+ 安卓性能之王

    經(jīng)過(guò)了一段時(shí)間的密集爆料,昨日iQOO官方如期對(duì)外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱(chēng)這是一款擁有旗艦級(jí)性能調(diào)校的作品。隨著發(fā)布時(shí)
  • 聯(lián)想的ThinkBook Plus下一版曝光,鍵盤(pán)旁邊塞個(gè)平板

    ThinkBook Plus 是聯(lián)想的一個(gè)特殊筆記本類(lèi)別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據(jù)有人爆料,聯(lián)想的下一款 ThinkBook Plus 可能更特殊,它
  • DRAM存儲(chǔ)器10月價(jià)格下跌,NAND閃存本月價(jià)格與上月持平

    10月30日,據(jù)韓國(guó)媒體消息,自今年年初以來(lái)一直在上漲的 DRAM 存儲(chǔ)器的交易價(jià)格僅在本月就下跌了近 10%,此次是全年首次降價(jià),而NAND 閃存本月價(jià)格與上月持平。市
Top 主站蜘蛛池模板: 新巴尔虎左旗| 嘉兴市| 固原市| 凯里市| 湛江市| 兰考县| 开封市| 睢宁县| 诸暨市| 德江县| 乌海市| 基隆市| 新龙县| 永修县| 阜新| 江源县| 和静县| 遂川县| 浦东新区| 左贡县| 黄大仙区| 姚安县| 晋中市| 平谷区| 阿勒泰市| 平远县| 梧州市| 彝良县| 太谷县| 西藏| 石嘴山市| 平果县| 图片| 郯城县| 长寿区| 聊城市| 牙克石市| 东兰县| 郧西县| 济南市| 郑州市|