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

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

SpringBoot中的敏感信息的配置進(jìn)行加密處理,這種方式你知道嗎?

來源: 責(zé)編: 時間:2023-08-20 23:17:13 863觀看
導(dǎo)讀環(huán)境:Springboot2.4.12 + Spring Cloud Context 3.0.5概述SpringBoot配置文件中的內(nèi)容通常情況下是明文顯示,安全性就比較低一些。在application.properties或application.yml,比如數(shù)據(jù)庫配置信息的密碼,Redis配置的密碼

環(huán)境:Springboot2.4.12 + Spring Cloud Context 3.0.5bMW28資訊網(wǎng)——每日最新資訊28at.com

概述

SpringBoot配置文件中的內(nèi)容通常情況下是明文顯示,安全性就比較低一些。在application.properties或application.yml,比如數(shù)據(jù)庫配置信息的密碼,Redis配置的密碼等都是通過明文配置的,為了提供系統(tǒng)整體的安全性,我們需要對這些敏感的信息進(jìn)行加密處理,這樣即便你難道了我的配置信息你也獲取不到有價值的信息。bMW28資訊網(wǎng)——每日最新資訊28at.com

在Springboot下我們可以通過如下兩種方式簡單的實現(xiàn)敏感信息的加密處理:bMW28資訊網(wǎng)——每日最新資訊28at.com

  1. Jasypt這是國外的一個開源加密工具包,功能強大。
  2. 基于EnvironmentPostProcessor實現(xiàn)我們可以通過實現(xiàn)這么一個接口來實現(xiàn)自己的加解密處理,我們也可以通過引入spring-cloud-context包,在該包中提供了一個DecryptEnvironmentPostProcessor處理器進(jìn)行對加密信息進(jìn)行解密。

關(guān)于Jasypt網(wǎng)上介紹的很多,這里不做介紹。這里我們主要只講Spring Cloud Context中提供的這個EnvironmentPostprocessor。bMW28資訊網(wǎng)——每日最新資訊28at.com

環(huán)境配置

<dependency>  <groupId>org.springframework.cloud</groupId>  <artifactId>spring-cloud-context</artifactId>  <version>3.0.5</version></dependency>

應(yīng)用配置bMW28資訊網(wǎng)——每日最新資訊28at.com

encrypt:  key: 123456789 #密鑰  salt: abcdef #加密的內(nèi)容使用了加鹽處理---spring:  cloud:    decrypt-environment-post-processor:      enabled: true #開啟解密功能

程序代碼

現(xiàn)在需要對custom.password這樣的一個key值進(jìn)行加密處理bMW28資訊網(wǎng)——每日最新資訊28at.com

custom:  password:  123456

首先需要對這明文生成加密的內(nèi)容,如下方式:bMW28資訊網(wǎng)——每日最新資訊28at.com

public static void main(String[] args) throws Exception {  String key = "123456789" ;  String salt = "abcdef" ;  String text = "123123" ;  KeyProperties keyProperties = new KeyProperties() ;  keyProperties.setKey(key) ;  keyProperties.setSalt(salt) ;  String result = TextEncryptorUtils.createTextEncryptor(keyProperties, null).encrypt(text) ;  System.out.println(result) ;}

通過上面的代碼就可以生成加密信息,接下來就是將加密后的內(nèi)容配置到配置文件中bMW28資訊網(wǎng)——每日最新資訊28at.com

custom:  password:  "{cipher}2a483a44681006be6f0730b1acb45325c6bd20abe37369ef4fdb52c2e194a365"

注意:這里的內(nèi)容是有格式要求的必須是:{cipher}開頭。這里還有一點需要注意有可能你運行上面的代碼會報錯,報錯信息應(yīng)該是 “Illegal key size” (非法的密鑰大小),比如:AES加密算法在默認(rèn)JDK(Sun的JDK)配置情況下支持的密鑰大小是128位,一旦超過就會報錯,這時候你需要安裝Java加密擴展(JCE)策略文件。下面提供了3個版本的JCE策略文件。bMW28資訊網(wǎng)——每日最新資訊28at.com

Java 6 JCE:bMW28資訊網(wǎng)——每日最新資訊28at.com

https://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.htmlbMW28資訊網(wǎng)——每日最新資訊28at.com

Java 7 JCEbMW28資訊網(wǎng)——每日最新資訊28at.com

https://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.htmlbMW28資訊網(wǎng)——每日最新資訊28at.com

Java 8 JCEbMW28資訊網(wǎng)——每日最新資訊28at.com

https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.htmlbMW28資訊網(wǎng)——每日最新資訊28at.com

下載對應(yīng)的版本后將其解壓如下位置:bMW28資訊網(wǎng)——每日最新資訊28at.com

JCE策略文件安裝目錄JCE策略文件安裝目錄bMW28資訊網(wǎng)——每日最新資訊28at.com

以上操作完成以后在運行上面的程序就能輸出結(jié)果了,然后將結(jié)果替換配置文件內(nèi)容即可。bMW28資訊網(wǎng)——每日最新資訊28at.com

接下來測試:bMW28資訊網(wǎng)——每日最新資訊28at.com

@Value("${custom.password}")public String pwd ;  @GetMapping("/pwd")public String pwd() {  return pwd ;}

圖片bMW28資訊網(wǎng)——每日最新資訊28at.com

正確的輸出了我們的內(nèi)容bMW28資訊網(wǎng)——每日最新資訊28at.com

原理

關(guān)于EnvironmentPostProcessor接口編寫完成以后都會進(jìn)行配置,我們上面引入的context包就對DecryptEnvironmentPostProcessor進(jìn)行了配置:bMW28資訊網(wǎng)——每日最新資訊28at.com

配置EnvironmentPostProcessor配置EnvironmentPostProcessorbMW28資訊網(wǎng)——每日最新資訊28at.com

public class DecryptEnvironmentPostProcessor extends AbstractEnvironmentDecrypt implements EnvironmentPostProcessor, Ordered {  @Override  public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {    // 判斷是否開啟了功能    if (bootstrapEnabled(environment) || useLegacyProcessing(environment) || !isEnabled(environment)) {      return;    }    // 如果環(huán)境中不存在TextEncryptor那么也不會開啟    if (!ClassUtils.isPresent("org.springframework.security.crypto.encrypt.TextEncryptor", null)) {      return;    }    // 獲取當(dāng)前環(huán)境下的所有配置屬性    MutablePropertySources propertySources = environment.getPropertySources();    environment.getPropertySources().remove(DECRYPTED_PROPERTY_SOURCE_NAME);    // 解密所有的配置屬性,這里也就是入口了    Map<String, Object> map = TextEncryptorUtils.decrypt(this, environment, propertySources);    if (!map.isEmpty()) {      // 將解密后的配置添加到環(huán)境中(addFirst 表示了添加到具有最高優(yōu)先級的給定屬性源對象)      propertySources.addFirst(new SystemEnvironmentPropertySource(DECRYPTED_PROPERTY_SOURCE_NAME, map));    }  }  protected Boolean isEnabled(ConfigurableEnvironment environment) {    // 獲取配置屬性值,是否開啟功能    return environment.getProperty("spring.cloud.decrypt-environment-post-processor.enabled", Boolean.class, true);  }}

解密配置bMW28資訊網(wǎng)——每日最新資訊28at.com

public abstract class TextEncryptorUtils {  static Map<String, Object> decrypt(AbstractEnvironmentDecrypt decryptor, ConfigurableEnvironment environment, MutablePropertySources propertySources) {    // 獲取加解密服務(wù)接口    TextEncryptor encryptor = getTextEncryptor(decryptor, environment);    return decryptor.decrypt(encryptor, propertySources);  }  static TextEncryptor getTextEncryptor(AbstractEnvironmentDecrypt decryptor, ConfigurableEnvironment environment) {    Binder binder = Binder.get(environment);    // 將屬性配置以 ‘encrypt’開頭的都綁定到KeyProperties對象中    KeyProperties keyProperties = binder.bind(KeyProperties.PREFIX, KeyProperties.class).orElseGet(KeyProperties::new);    // 檢查是否配置了encrypt.key 等核心的信息    if (TextEncryptorUtils.keysConfigured(keyProperties)) {      decryptor.setFailOnError(keyProperties.isFailOnError());      // 檢查是否當(dāng)前CLASSPATH中是否存在RsaSecretEncryptor      if (ClassUtils.isPresent("org.springframework.security.rsa.crypto.RsaSecretEncryptor", null)) {        RsaProperties rsaProperties = binder.bind(RsaProperties.PREFIX, RsaProperties.class).orElseGet(RsaProperties::new);        return TextEncryptorUtils.createTextEncryptor(keyProperties, rsaProperties);      }      // 如果你沒有使用及配置Rsa相關(guān)的,那么就會在這里創(chuàng)建加解密服務(wù)接口,這里跟蹤了下使用的是AES加密算法      return new EncryptorFactory(keyProperties.getSalt()).create(keyProperties.getKey());    }    // no keys configured    return new TextEncryptorUtils.FailsafeTextEncryptor();  }}

獲取到了加解密服務(wù)接口以后,接下來就是對配置屬性進(jìn)行解密操作。bMW28資訊網(wǎng)——每日最新資訊28at.com

public class AbstractEnvironmentDecrypt {  public static final String ENCRYPTED_PROPERTY_PREFIX = "{cipher}";  protected Map<String, Object> decrypt(TextEncryptor encryptor, PropertySources propertySources) {    Map<String, Object> properties = merge(propertySources);    // 解密處理    decrypt(encryptor, properties);    return properties;  }  protected void decrypt(TextEncryptor encryptor, Map<String, Object> properties) {    // 開始替換所有以{cipher}開頭的屬性值    properties.replaceAll((key, value) -> {      String valueString = value.toString();      if (!valueString.startsWith(ENCRYPTED_PROPERTY_PREFIX)) {        return value;      }      // 解密數(shù)據(jù), key 配置屬性的key, valueString要解密的數(shù)據(jù)      return decrypt(encryptor, key, valueString);    });  }  protected String decrypt(TextEncryptor encryptor, String key, String original) {    // 截取{cipher}之后的內(nèi)容    String value = original.substring(ENCRYPTED_PROPERTY_PREFIX.length());    try {       // 解密數(shù)據(jù)      value = encryptor.decrypt(value);      return value;    } catch (Exception e) {      // ...      return "";    }  }}

整個源碼處理還是非常簡單的。bMW28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-6190-0.htmlSpringBoot中的敏感信息的配置進(jìn)行加密處理,這種方式你知道嗎?

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

上一篇: GitHub和碼云上,七個H5頁面制作工具推薦

下一篇: Go 語言中排序的三種方法

標(biāo)簽:
  • 熱門焦點
  • Raft算法:保障分布式系統(tǒng)共識的穩(wěn)健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復(fù)制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統(tǒng)
  • K8S | Service服務(wù)發(fā)現(xiàn)

    一、背景在微服務(wù)架構(gòu)中,這里以開發(fā)環(huán)境「Dev」為基礎(chǔ)來描述,在K8S集群中通常會開放:路由網(wǎng)關(guān)、注冊中心、配置中心等相關(guān)服務(wù),可以被集群外部訪問;圖片對于測試「Tes」環(huán)境或者
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數(shù)中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 本地生活這塊肥肉,拼多多也想吃一口

    出品/壹覽商業(yè) 作者/李彥編輯/木魚拼多多也看上本地生活這塊蛋糕了。近期,拼多多在App首頁&ldquo;充值中心&rdquo;入口上線了本機生活界面。壹覽商業(yè)發(fā)現(xiàn),該界面目前主要
  • 阿里大調(diào)整

    來源:產(chǎn)品劉有媒體報道稱,近期淘寶天貓集團啟動了近年來最大的人力制度改革,涉及員工績效、層級體系等多個核心事項,目前已形成一個初步的&ldquo;征求意見版&rdquo;:1、取消P序列
  • 小米MIX Fold 3下月亮相:今年唯一無短板的全能折疊屏

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都有新的進(jìn)展,其中榮耀、三星都已陸續(xù)發(fā)布了最新的折疊屏旗艦,尤其號榮耀Magi
  • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發(fā)布

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
  • 電博會上海爾智家模擬500平大平層,還原生活空間沉浸式體驗

    電博會為了更好地讓參展觀眾真正感受到智能家居的絕妙之處,海爾智家的程傳嶺先生同樣介紹了展會上海爾智家的模擬500平大平層,還原生活空間沉浸式體驗。程傳
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲视频在线观看三级| 在线观看日韩欧美| 欧美日韩日日骚| 欧美性猛交xxxx乱大交蜜桃| 国产美女精品一区二区三区| 久久精品国产第一区二区三区最新章节 | 亚洲国产另类久久精品| 一本高清dvd不卡在线观看| 亚洲欧美在线视频观看| 久久综合电影一区| 欧美日韩视频在线一区二区观看视频 | 在线观看视频一区| 亚洲精品免费在线播放| 亚洲欧美国产毛片在线| 久久久综合网站| 欧美乱妇高清无乱码| 久久精品九九| 欧美巨乳在线| 国产色综合久久| 亚洲国产一区二区在线| 亚洲影院高清在线| 裸体素人女欧美日韩| 欧美视频日韩视频在线观看| 国内久久精品| 一区二区免费在线视频| 久久久久九九视频| 欧美猛交免费看| 国产一区二区三区网站| 99视频在线观看一区三区| 久久精品视频在线| 欧美三级视频| 1024国产精品| 午夜欧美不卡精品aaaaa| 欧美激情国产精品| 国产麻豆9l精品三级站| 亚洲美女中文字幕| 久久精品国产在热久久 | 国产欧美日韩在线 | 99爱精品视频| 久久视频在线免费观看| 欧美小视频在线观看| 亚洲高清在线观看| 欧美一区二区三区视频| 欧美喷水视频| 激情综合久久| 香蕉成人伊视频在线观看| 欧美日韩精品在线播放| 一区精品久久| 午夜精彩国产免费不卡不顿大片| 欧美国产激情二区三区| 欧美 日韩 国产精品免费观看| 国产精品日韩精品欧美精品| 亚洲乱码国产乱码精品精| 日韩一级精品视频在线观看| 国产丝袜一区二区三区| 一区二区三区你懂的| 欧美va亚洲va香蕉在线| 国产一区视频在线看| 亚洲一区在线观看免费观看电影高清| 女生裸体视频一区二区三区| 国产综合精品| 欧美一区二区三区四区视频| 国产精品卡一卡二| 宅男噜噜噜66一区二区 | 国产精品地址| 99国产麻豆精品| 欧美不卡在线| 亚洲第一精品夜夜躁人人躁| 久久精品亚洲一区二区三区浴池| 国产精品一区二区三区观看| 亚洲一级二级| 欧美性色视频在线| 一区二区三区久久网| 欧美精选在线| 日韩一级黄色av| 欧美另类在线播放| 亚洲精品国精品久久99热| 蜜臀久久久99精品久久久久久| 黄色成人av网| 久久久亚洲国产天美传媒修理工| 国产日产欧美a一级在线| 小黄鸭精品aⅴ导航网站入口| 国产精品你懂的| 亚洲欧美一区二区在线观看| 国产精品亚洲美女av网站| 亚洲永久网站| 国产精品免费网站在线观看| 亚洲欧美成人精品| 国产精品久久一区二区三区| 亚洲一二三区在线| 国产欧美精品一区二区色综合| 亚洲欧美日韩在线播放| 国产视频一区在线| 久久久精品一区二区三区| 国内精品久久久久影院 日本资源| 久久精品成人| 精品成人一区二区三区四区| 久久久久综合一区二区三区| 在线成人激情黄色| 欧美精品在线视频| 一区二区三区久久| 国产精品欧美日韩一区| 欧美一区影院| 狠狠色狠狠色综合日日91app| 免费久久99精品国产自在现线| 91久久久久久久久久久久久| 欧美日韩精品欧美日韩精品一| 亚洲午夜av在线| 国产亚洲欧美日韩美女| 免费成人网www| 夜夜精品视频| 国产拍揄自揄精品视频麻豆| 久久人体大胆视频| 日韩视频亚洲视频| 国产精品影音先锋| 久久综合999| 亚洲视频axxx| 国内揄拍国内精品少妇国语| 欧美大胆成人| 亚洲一区在线播放| 激情视频亚洲| 欧美日韩亚洲一区二区三区在线观看| 亚洲欧美亚洲| 亚洲国产成人在线| 国产精品美女久久福利网站| 久久日韩精品| 亚洲午夜精品在线| 狠狠久久婷婷| 欧美日韩一区视频| 久久九九99视频| 99riav久久精品riav| 国产亚洲精品久久久| 亚洲资源在线观看| 国产一区二区精品在线观看| 欧美精品亚洲| 欧美一级网站| 亚洲精品一级| 国产一区二区黄色| 欧美日韩亚洲不卡| 久久久久久久久久看片| 中国亚洲黄色| 国内自拍亚洲| 欧美视频中文字幕| 久久免费偷拍视频| 亚洲午夜电影| 亚洲欧洲偷拍精品| 国产一二精品视频| 欧美日韩亚洲高清| 久久午夜精品一区二区| 亚洲欧美在线磁力| 亚洲日韩第九十九页| 国产欧美在线看| 欧美欧美午夜aⅴ在线观看| 久久久国产视频91| 亚洲午夜久久久久久尤物 | 国产精品久久久久久久久果冻传媒| 久久久www成人免费精品| 日韩亚洲不卡在线| 狠狠色狠狠色综合日日五| 欧美丝袜一区二区| 亚洲在线免费观看| 亚洲国产一区视频| 国产一区二区三区电影在线观看 | 国产日韩欧美在线看| 欧美日韩一区二区三区视频 | 国产视频久久久久久久| 欧美日韩二区三区| 免费久久99精品国产| 性欧美8khd高清极品| 一区二区激情小说| 国产日韩精品在线| 欧美久久久久中文字幕| 久久色在线播放| 欧美在线免费视屏| 亚洲一区二区在线免费观看| 亚洲精品影院| 亚洲第一区在线| 韩国成人理伦片免费播放| 国产精品视频网址| 欧美色图天堂网| 欧美—级a级欧美特级ar全黄| 久久夜色精品国产欧美乱极品| 欧美在线视频二区| 亚洲欧美怡红院| 亚洲伊人伊色伊影伊综合网| 亚洲视屏一区| 中国日韩欧美久久久久久久久| 日韩午夜在线电影| 亚洲理论在线| 亚洲美女精品久久| 亚洲精品美女91| 亚洲欧洲综合| 亚洲国产欧美在线| 亚洲国产欧美在线| 亚洲欧洲精品一区二区三区不卡| 在线国产精品一区| 伊人久久久大香线蕉综合直播| 国内自拍一区| 一区二区三区中文在线观看| 一区二区三区在线观看视频| 永久域名在线精品| 在线高清一区| 亚洲欧洲日产国产综合网| 亚洲欧洲精品一区|