日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SpringCloud敏感信息配置揭秘,教你防止信息泄露!

環(huán)境:SpringBoot2.7.12 + SpringCloud2021.0.7 + JDK17

創(chuàng)新互聯(lián)服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過十年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

1. 簡介

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

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

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

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

2. 加解密配置

  • 引入依賴

  17
  2021.0.7


  
    org.springframework.cloud
    spring-cloud-context
    ${spring-cloud.version}
  
  • 配置密鑰信息
spring:
  cloud:
    bootstrap:
      enabled: false # 這里必須是false,默認(rèn)是false。
---
#加密配置
encrypt:
  #密鑰
  key: aaaabbbbccccdddd
  #加密處理時(shí)的加鹽信息
  salt: dead
  • 加密敏感信息
// 通過如下方式將我們需要加密的內(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}

通過以上的配置,我們的配置也是完全可以正常工作的,測試如下:

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é)果:

123123!@

正確的輸出了結(jié)果。

到此配置文件敏感信息加密就完成了。但是發(fā)現(xiàn)我們非常重要的密鑰信息還是存在配置文件中,這樣還是和沒加密一樣啊,還是暴露了。我們可以通過命令行的方式來設(shè)置密鑰信息。

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

通過這樣設(shè)置,我們的程序也將正常的運(yùn)行。其實(shí)命令行參數(shù)在程序運(yùn)行過程中會(huì)自動(dòng)的將這些信息添加到Environment中。

3. 實(shí)現(xiàn)原理

spring cloud context中提供了下面一個(gè)配置類,該配置類配置了一個(gè)ApplicationInitializer應(yīng)用程序初始化類,也就是ApplicationContext容器初始化前執(zhí)行的(Environment準(zhǔn)備完之后)。

注意:這里是當(dāng)我們項(xiàng)目中使用了配置中心,如使用了nacos的配置中心時(shí)

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

EnvironmentDecryptApplicationInitializer 類會(huì)解密我們的配置信息

public class EnvironmentDecryptApplicationInitializer {
  private TextEncryptor encryptor;


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

當(dāng)我們項(xiàng)目中沒有啟用配置中心時(shí),使用的是另外一個(gè)EnvironmentPostProcessor。

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 map = TextEncryptorUtils.decrypt(this, environment, propertySources);
  }
}

了解了上面的源碼實(shí)現(xiàn),其實(shí)我們自己也可以借鑒它的實(shí)現(xiàn)方式來實(shí)現(xiàn)自己的配置文件處理。

注:配置文件的加解密也是支持RSA這種非對(duì)稱算法的,有興趣可以了解下,也是非常的簡單。

完畢!?。?/p>
網(wǎng)站標(biāo)題:SpringCloud敏感信息配置揭秘,教你防止信息泄露!
網(wǎng)頁地址:http://m.5511xx.com/article/cdjiioj.html