Nacos 配置加密功能也太雞肋了吧,有種更好的方式

大家好,我是風箏,微信搜「古時的風箏」,更多干貨

當項目中用了 Nacos 做配置中心,是不是所有的配置都放到里面呢,大部分時候為了省事和統一,系統所有的配置都直接放在里面了,有時候,會包括一些賬號、密碼、秘鑰等信息。

這時候你們的項目是怎么處理的呢?

一種方式,不管它,反正 Nacos 有密碼,如果 Nacos 都被攻破了,那也沒辦法。

還有一種方式,這些涉及到密碼、秘鑰的信息放到本地環境變量中,這種方式雖然也還算方便,但是管理起來就不是很統一了。

那有沒有什么一舉兩得的方式呢?

Nacos2.0本身的插件功能

Nacos 本身提供了一種加密實現,是基于SPI的插件機制實現的。

要使用插件,需要Nacos版本是2.x版本,如果你正在使用1.x版本,需要進行升級。

引入插件包。

<dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-aes-encryption-plugin</artifactId><version>${nacos-aes-encryption-plugin.version}</version>
</dependency>

之后如果想對配置加密,需要創建名稱為 cipher-[加密算法名稱]-dataId這種規則的配置文件,例如cipher-aes-application-dev.yml

之后不管你在配置中寫上什么內容,都會被加密。

例如:

password: 123456

那在程序中讀出來的都是被加密過的,需要你調用插件提供的解密方法解密,或者自定義加解密方法。

但實話說這種方式有點粗暴了。不加密則已,一加密那就是整個配置文件啊,這好像也不太符合只有部分字段需要加密的場景。

而且你還必須得升級到2.x的版本才行,都做成插件了,還要區分版本。

而且官方文檔相當敷衍了,實在不像是誠意之作啊。

我選擇放棄這種方式。

我選擇 Jasypt

Jasypt 其實是一個專門用于加解密的庫,對于像 Nacos 配置文件、本地配置文件等配置信息的加解密就是一個順手的事兒。

加解密就不用多說了,有很多的開源包,甚至你自己寫一個工具類都是輕而易舉的事兒。

如果我們使用 Spring Boot 的話,一般讀取配置的時候用下面這種方式,不管是本地配置文件、環境變量或者Nacos都可以通用。

@Value("${aestest.appKey}")
private String appKey;

如果改成加密的配置后,上面的 appKey 讀出來的內容可能就變成了0cxddfjjgglllsff000s這種一串看不懂的內容了。當然了,我們可以在使用這個變量的地方調用解密方法進行解密,但是這樣一來,就變得很麻煩了。

開始我還打算自己寫一個來著,后來發現 jasypt-spring-boot-starter正好完美的實現了,直接用它就好了。

1、首先引入jasypt專門為 Spring Boot 開發的包

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

2、在配置文件中進行相關配置

jasypt:encryptor:password: helloalgorithm: PBEWithMD5AndDES

algorithm是加密算法,官方默認的加密算法是 PBEWITHHMACSHA512ANDAES_256,但是如果你用的是 JDK1.8,還用不了這個算法,JDK9以上才支持,所以可以把這個算法改成PBEWithMD5AndDES

password是加解密的時候用到的密碼,這個配置是不建議放到Nacos的,可以放到環境變量中,這樣一來,就只有這一個參數放到環境變量了。

3、生成加密字符串

Jasypt 默認用 Enc(內容)這樣的格式來表示這是加密的配置,當然你可以通過配置來修改前綴和后綴,比如改成 JASYPT[內容]這種形式,其中內容部分是加密后的。

加密串可以這樣生成。

引入加密類

@Autowired
private StringEncryptor encryptor;

生成加密內容

@GetMapping("/encrypt")
public String encrypt(String content) {return "ENC(" + encryptor.encrypt(content) + ")";
}

4、最后將生成的加密串保存到 Nacos 或本地配置中,例如下面這樣

aestest:appKey: ENC(GT2vTn1+SdeFu90xH/vgw3uYTNyV5PGp)

5、直接使用@Value注解獲取就行,和不加密的用法一模一樣

@Value("${aestest.appKey}")
private String appKey;
原理

加密的原理沒啥好說的,上面用的PBEWithMD5AndDES就是DES加密算法。

@Value注解直接拿到解密后的值,其實是實現了BeanFactoryPostProcessor接口,相當于利用 Spring Boot 的加載機制做了一個filter,在filter中查找 @Value注解,并且內容是以 Jasypt 指定的前后綴的配置項(例如ENC()),將找到的內容進行解密,再賦值解密后的值。

更詳細的用法可在官方GitHub倉庫中查看,地址:https://github.com/ulisesbocchio/jasypt-spring-boot

不如點個贊
在這里插入圖片描述

推薦閱讀

? 劍走偏鋒,無頭瀏覽器是什么神奇的家伙

? 新項目決定用 JDK 17了

? 5000字,10張圖,完全掌握 MySQL 事務隔離級別

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209606.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是自動化測試框架?常用的自動化測試框架有哪些?

無論是在自動化測試實踐&#xff0c;還是日常交流中&#xff0c;經常聽到一個詞&#xff1a;框架。之前學習自動化測試的過程中&#xff0c;一直對“框架”這個詞知其然不知其所以然。 最近看了很多自動化相關的資料&#xff0c;加上自己的一些實踐&#xff0c;算是對“框架”…

Redis相關知識

yum安裝redis 使用以下命令&#xff1a;直接將redis安裝到Linux服務器&#xff08;Xshell&#xff09;中 yum -y install redis 啟動redis 使用以下命令&#xff0c;以后臺運行方式啟動redis redis-server /etc/redis.conf & 操作redis 使用以下命令啟動redis客戶端 redis-…

RFID在新能源工廠大放異彩

RFID在新能源工廠大放異彩 我國在十四五規劃中提出了建設綠色低碳發展的目標&#xff0c;新能源產業成為了國家發展的重點領域之一&#xff0c;開始大力支持各種新能源廠商發展。各個廠商之間不僅比產品、比技術。也比生產想要降本增效&#xff0c;為了實現這一目標&#xff0…

MBD Introduction

介紹 MATLAB是MathWorks公司的商業數學軟件&#xff0c;應用于科學計算、可視化以及交互式程序設計等高科技計算環境。Simulink是MATLAB中的一種可視化仿真工具。 Simulink是一個模塊圖環境&#xff0c;用于多域仿真以及基于模型的設計。它支持系統設計、仿真、自動代碼生成以…

Spring基于xml半注解開發

目錄 Component的使用 依賴注解的使用 非自定義Bean的注解開發 Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>標簽及其標簽屬性的配置&#xff0c;使用Component注解替代<bean>標簽中的id以及class屬性&#xff0c;而對…

算法Day26 數位統計

數位統計 Description 給你一個整數n&#xff0c;統計并返回各位數字都不同的數字x的個數&#xff0c;其中0 ≤ x < 10^n。 Input 輸入整數n 0≤n≤13 Output 輸出整數個數 Sample 代碼 import java.util.Scanner;public class Main {public static void main(String[] ar…

一個Oracle Application Container的實例

本例基本涵蓋了Oracle Multitenant功能中application container的以下內容&#xff1a; 創建application container/root創建application PDB創建application SEED在application root中安裝application在application root中升級application同步application 整個過程如下 創建…

Epoll服務器(ET工作模式)

目錄 Epoll ET服務器設計思路Connection類TcpServer類 回調函數Accepter函數Recever函數Sender函數Excepter函數 事件處理套接字相關接口封裝運行Epoll服務器 Epoll ET服務器 設計思路 在epoll ET服務器中&#xff0c;我們需要處理如下幾種事件&#xff1a; 讀事件&#xff…

基于javeweb實現的圖書借閱管理系統

一、系統架構 前端&#xff1a;jsp | js | css | jquery 后端&#xff1a;servlet | jdbc 環境&#xff1a;jdk1.7 | mysql | tocmat 二、代碼及數據庫 三、功能介紹 01. 登錄頁 02. 首頁 03. 圖書管理 04. 讀者管理 05. 圖書分類管理 06. 圖書借閱信息 07. 圖書歸還信…

CDN加速技術:降低服務器與網站成本的智慧選擇

隨著互聯網的飛速發展&#xff0c;網站的訪問量不斷攀升&#xff0c;服務器負載壓力逐漸增大。為了提高用戶體驗、降低服務器成本&#xff0c;并確保網站的高可用性&#xff0c;CDN&#xff08;內容分發網絡&#xff09;加速技術應運而生。本文將從服務器與網站成本的角度分析C…

NLP項目實戰01--電影評論分類

介紹&#xff1a; 歡迎來到本篇文章&#xff01;在這里&#xff0c;我們將探討一個常見而重要的自然語言處理任務——文本分類。具體而言&#xff0c;我們將關注情感分析任務&#xff0c;即通過分析電影評論的情感來判斷評論是正面的、負面的。 展示&#xff1a; 訓練展示如下…

比較不同聚類方法的評估指標

歸一化互信息&#xff08;NMI&#xff09; 要求&#xff1a;需要每個序列的真實標簽&#xff08;分類信息&#xff09;

你在地鐵上修過bug嗎?

作為技術人員&#xff0c;有沒有遇到下班路上收到老板電話&#xff0c;系統故障&#xff0c;然后地鐵上掏出電腦&#xff0c;修bug的場景。自己負責的業務線上出現問題&#xff0c;負責人心里是很慌的&#xff0c;在這種心理狀態下做事很容易二次犯錯&#xff0c;造成更大的問題…

SAP UI5 walkthrough step10 Descriptor for Applications

在這一步&#xff0c;我們將會把所有的應用相關的描述性的文件獨立放到manifest.json 新建一個manifest.json文件 webapp/manifest.json (New) {"_version": "1.58.0","sap.app": {"id": "ui5.walkthrough","i18n&q…

【已解決】No module named ‘sklearn‘

問題描述 No module named ‘sklearn‘ 解決辦法 pip install scikit-learn 完結撒花 契約、包容、感恩、原則……這些成年人該有的基本精神&#xff0c;為什么我在他們身上找不到呢&#xff1f;

圖像疊加中文字體

目錄 1) 前言2) freetype下載3) Demo3.1) 下載3.2) 編譯3.3) 運行3.4) 結果3.5) 更詳細的使用見目錄中說明 4) 積少成多 1) 前言 最近在做圖片、視頻疊加文字&#xff0c;要求支持中文&#xff0c;基本原理是將圖片或視頻解碼后疊加文字&#xff0c;之后做圖片或視頻編碼即可。…

ASP.NET Core概述-微軟已經收購了mono,為什么還搞.NET Core呢

一、.NET Core概述 1、相關歷程 .NET在設計之初也是考慮像Java一樣跨平臺&#xff0c;.NET Framework是在Windows下運行的&#xff0c;大部分類是可以兼容移植到Linux下&#xff0c;但是沒有人做這個工作。 2001年米格爾為Gnome尋找桌面開發技術&#xff0c;在研究了微軟的.…

數據庫版本管理框架-Flyway(從入門到精通)

一、flyway簡介 Flyway是一個簡單開源數據庫版本控制器&#xff08;約定大于配置&#xff09;&#xff0c;主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL&#xff08;PL/SQL、T-SQL&#xff09;方式和Java方式&#xff0c;支持命令行客戶端等&am…

TCP對數據的拆分

應用程序的數據一般都比較大&#xff0c;因此TCP會按照網絡包的大小對數據進行拆分。 當發送緩沖區中的數據超過MSS的長度&#xff0c;數據會被以MSS長度為單位進行拆分&#xff0c;拆分出來的數據塊被放進單獨的網路包中。 根據發送緩沖區中的數據拆分情況&#xff0c;當判斷…

ffmpeg編譯問題

利用ffmpeg實現一個播放器&#xff0c;ffmpeg提供動態庫&#xff0c;但是編譯鏈接的時候遇到下面的問題&#xff1a; ../ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to sws_freeContext(SwsContext*) ../ffmpegWidgetPlayer/videoplayerwidget.…