最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot對(duì)數(shù)據(jù)庫用戶名和密碼進(jìn)行加密的兩種方案

 更新時(shí)間:2025年12月11日 09:10:53   作者:明有所思  
在當(dāng)今互聯(lián)網(wǎng)時(shí)代,?數(shù)據(jù)庫安全的重要性不言而喻,作為Java開發(fā)的主流框架,Spring Boot項(xiàng)目通常需要連接數(shù)據(jù)庫,而數(shù)據(jù)庫的?用戶名和密碼作為最敏感的信息之一,所以本文給大家詳細(xì)介紹兩種主流的數(shù)據(jù)源配置加密方案,需要的朋友可以參考下

引言

在當(dāng)今互聯(lián)網(wǎng)時(shí)代, 數(shù)據(jù)庫安全的重要性不言而喻。作為Java開發(fā)的主流框架,Spring Boot項(xiàng)目通常需要連接數(shù)據(jù)庫,而數(shù)據(jù)庫的 用戶名和密碼作為最敏感的信息之一,如果直接以明文形式存儲(chǔ)在 application.properties或 application.yml配置文件中,將存在極大的安全隱患。特別是在項(xiàng)目代碼需要上傳到GitHub等開源平臺(tái)或團(tuán)隊(duì)協(xié)作開發(fā)時(shí), 明文數(shù)據(jù)庫憑證可能會(huì)被惡意利用,導(dǎo)致數(shù)據(jù)泄露甚至被刪除的風(fēng)險(xiǎn)。

因此,對(duì)Spring Boot項(xiàng)目中的數(shù)據(jù)庫用戶名和密碼進(jìn)行加密處理,是每個(gè)開發(fā)者都應(yīng)該重視的安全實(shí)踐。本文將從實(shí)際應(yīng)用出發(fā),詳細(xì)介紹兩種主流的數(shù)據(jù)源配置加密方案:Jasypt(通用性加密庫)和Druid(自帶加密功能的數(shù)據(jù)源),幫助你根據(jù)項(xiàng)目需求選擇最適合的方案,全面提升應(yīng)用安全性。

下面是一個(gè)快速對(duì)比,幫助你了解兩種主要方案的特點(diǎn):

特性JasyptDruid 數(shù)據(jù)源加密
加密方式對(duì)配置值進(jìn)行對(duì)稱加密,使用 ENC(密文) 包裹使用內(nèi)置的 RSA 非對(duì)稱加密工具對(duì)密碼進(jìn)行加密
集成度與 Spring Boot 生態(tài)集成度高,配置簡單主要針對(duì) Druid 數(shù)據(jù)源,配置稍復(fù)雜
工作原理程序啟動(dòng)時(shí)自動(dòng)識(shí)別并解密 ENC() 中的內(nèi)容通過配置 ConfigFilter 在連接池初始化時(shí)解密
依賴需添加 jasypt-spring-boot-starter 依賴需使用 druid 數(shù)據(jù)源
推薦場景通用性強(qiáng),適用于加密配置文件中的任何敏感信息適用于專注于使用 Druid 數(shù)據(jù)源并提供額外安全的場景

一、使用 Jasypt 加密

Jasypt(Java Simplified Encryption)是一個(gè)簡單易用的Java加密庫,它與Spring Boot生態(tài)集成度高,可以非常方便地對(duì)配置文件中的任何敏感信息進(jìn)行加密處理。其核心思想是對(duì)明文字段進(jìn)行對(duì)稱加密,然后將加密后的密文(用ENC()包裹)置于配置文件中。應(yīng)用程序在啟動(dòng)時(shí),Jasypt會(huì)自動(dòng)識(shí)別并解密這些密文,獲取真實(shí)的配置值。

步驟 1:添加依賴

在項(xiàng)目的 pom.xml 中添加 Jasypt 依賴。請(qǐng)注意版本兼容性,部分 Spring Boot 版本與較新的 Jasypt 版本可能存在兼容性問題,有資料推薦使用 2.1.23.0.4 等穩(wěn)定版本。

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version> <!-- 請(qǐng)根據(jù)你的Spring Boot版本選擇合適版本 -->
</dependency>

注意:如果后續(xù)啟動(dòng)應(yīng)用時(shí)出現(xiàn)Failed to bind properties等錯(cuò)誤,可能是版本不兼容所致,可以嘗試降低Jasypt版本(例如使用2.1.2)。

步驟 2:獲取加密密文

你需要使用 Jasypt 提供的工具對(duì)明文密碼進(jìn)行加密。

方法一:使用 JAR 包命令行加密(常用)

  1. 找到本地 Maven 倉庫中的 jasypt-1.9.3.jar(版本號(hào)可能不同)。
  2. 在命令行中執(zhí)行以下命令(請(qǐng)?zhí)鎿Q your_secret_key 為你的加密密鑰,plain_text 為你的明文密碼):
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="plain_text" password="your_secret_key" algorithm="PBEWithMD5AndDES"

命令輸出中的 OUTPUT 就是加密后的密文。

方法二:在 Java 代碼中加密

你也可以編寫一個(gè)簡單的工具類來加密:

import org.jasypt.util.text.BasicTextEncryptor;

public class JasyptEncryptor {
    public static void main(String[] args) {
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword("your_secret_key"); // 設(shè)置加密密鑰
        String encryptedPassword = encryptor.encrypt("your_db_password"); // 加密
        System.out.println("Encrypted password: " + encryptedPassword);
        
        // 如果需要解密驗(yàn)證
        // String decryptedPassword = encryptor.decrypt(encryptedPassword);
        // System.out.println("Decrypted password: " + decryptedPassword);
    }
}

步驟 3:修改配置文件

將加密后的密文(例如:LPbn37xuIIAfCkaermp5cQ)用 ENC() 包裹,替換到 application.propertiesapplication.yml 中,并配置加密密鑰。

application.yml 示例:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database
    username: ENC(加密后的用戶名密文) # 如果用戶名也加密了
    password: ENC(LPbn37xuIIAfCkaermp5cQ) # 加密后的密碼密文

jasypt:
  encryptor:
    password: your_secret_key # 此處是加密時(shí)使用的密鑰
    # algorithm: PBEWithMD5AndDES # 如需指定算法,默認(rèn)可能已是更安全的算法

步驟 4:安全地傳遞加密密鑰

絕不能將加密密鑰(your_secret_key)直接寫死在配置文件中。推薦通過環(huán)境變量或啟動(dòng)參數(shù)傳遞:

啟動(dòng)參數(shù)傳遞

java -jar -Djasypt.encryptor.password=your_secret_key your-app.jar

環(huán)境變量傳遞

在應(yīng)用啟動(dòng)前設(shè)置環(huán)境變量JASYPT_ENCRYPTOR_PASSWORD。

注意事項(xiàng)

  1. 版本兼容性:Jasypt 新版本(如 3.0.3+)有時(shí)會(huì)更改默認(rèn)加密算法,可能導(dǎo)致與舊版本不兼容而啟動(dòng)報(bào)錯(cuò)。若遇到 Failed to bind properties 等相關(guān)錯(cuò)誤,可嘗試降低 Jasypt 版本(例如使用 2.1.2)或檢查算法配置是否匹配。
  2. 加密算法:早期版本默認(rèn)使用 PBEWithMD5AndDES。對(duì)于更高安全需求,建議使用更強(qiáng)大的算法(如 PBEWITHHMACSHA512ANDAES_256),但這可能需要安裝 Java Cryptography Extension (JCE)。
  3. 啟用加密功能:在某些舊版本或特定配置下,可能需要在主應(yīng)用類上添加 @EnableEncryptableProperties 注解。但許多較新版本的 jasypt-spring-boot-starter 會(huì)自動(dòng)配置。
  4. 不僅僅是數(shù)據(jù)庫密碼:Jasypt 可用于加密配置文件中的任何敏感信息,如 Redis 密碼、API 密鑰等。
  5. 測試:配置完成后,務(wù)必啟動(dòng)測試,確保應(yīng)用能成功解密并連接數(shù)據(jù)庫。

二、使用Druid 數(shù)據(jù)源加密方案

如果你在項(xiàng)目中使用的是阿里巴巴開發(fā)的Druid數(shù)據(jù)源,那么它自身就提供了數(shù)據(jù)庫密碼加密的功能。Druid使用的是非對(duì)稱的RSA加密方案,相較于Jasypt的對(duì)稱加密,安全性更高。

Druid提供了命令行工具來生成加密后的密碼和相應(yīng)的公鑰、私鑰。

下載Druid的JAR包(例如druid-1.2.6.jar)。

在命令行中執(zhí)行以下命令:

java -cp druid-1.2.6.jar com.alibaba.druid.filter.config.ConfigTools your_db_password

此命令會(huì)輸出:

如下圖,在命令窗口執(zhí)行上述命令后后會(huì)生成私鑰(privateKey)、公鑰(publicKey)和加密后的密碼(password)

  • privateKey: 你的私鑰 (必須妥善保管,用于解密)
  • publicKey: 你的公鑰 (可以配置在連接池中)
  • password: 加密后的密碼

配置 application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://localhost:3306/your_database
      username: your_username # 若用戶名也需要加密,則替換為加密后的用戶名
      password: ${encrypted_password} # 此處替換為加密后密碼
      filters: config
      connection-properties: config.decrypt=true;config.decrypt.key=${public_key} # 此處public_key需替換或通過環(huán)境變量注入
      filter:
        config:
          enabled: true

同樣,公鑰(public_key)也應(yīng)通過環(huán)境變量等安全方式注入,而非硬編碼在配置文件中。

借助Druid中的ConfigTools工具類來加密數(shù)據(jù)庫對(duì)應(yīng)的密碼:

	public static void main(String[] args) throws Exception {
        String password = "123456";
        ConfigTools.main(new String[]{password});
    }

如需對(duì)用戶名進(jìn)行加密,可使用上述密碼加密后生成的privateKey進(jìn)行用戶名加密,代碼如下:

	public static void main(String[] args) throws Exception {
        String username = "root";
        String privateKey = ""; // 填充密碼加密生成的privateKey
        String encrypt = ConfigTools.encrypt(pr, name);
        System.out.println(encrypt);
        
        // 如需解密驗(yàn)證,使用下面的方法
        // String publicKey = ""; // 填充密碼加密生成的publicKey
        // String decrypt = ConfigTools.decrypt(publicKey, encrypt);
        // System.out.println(decrypt);
  	}

三、總結(jié)

為 Spring Boot 應(yīng)用配置數(shù)據(jù)庫密碼加密是提升安全性的重要一步。

  • 對(duì)于大多數(shù)項(xiàng)目,推薦使用 Jasypt,它通用且與 Spring Boot 集成簡單。使用時(shí)請(qǐng)注意版本兼容性,并務(wù)必通過安全方式(如啟動(dòng)參數(shù)、環(huán)境變量)傳遞加密密鑰,避免硬編碼。
  • 若項(xiàng)目已使用 Druid 數(shù)據(jù)源,且安全要求較高,可以考慮使用其自帶的 RSA 加密方案。

以上就是SpringBoot對(duì)數(shù)據(jù)庫用戶名和密碼進(jìn)行加密的兩種方案的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot數(shù)據(jù)庫用戶名和密碼加密的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot定制三種錯(cuò)誤頁面及錯(cuò)誤數(shù)據(jù)方法示例

    SpringBoot定制三種錯(cuò)誤頁面及錯(cuò)誤數(shù)據(jù)方法示例

    Spring Boot提供的默認(rèn)異常處理機(jī)制通常并不一定適合我們實(shí)際的業(yè)務(wù)場景,因此,我們通常會(huì)根據(jù)自身的需要對(duì)Spring Boot全局異常進(jìn)行統(tǒng)一定制,例如定制錯(cuò)誤頁面,定制錯(cuò)誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯(cuò)誤頁面的實(shí)現(xiàn),快來學(xué)習(xí)吧
    2021-12-12
  • Java中5種異步實(shí)現(xiàn)的方式詳解

    Java中5種異步實(shí)現(xiàn)的方式詳解

    同步操作如果遇到一個(gè)耗時(shí)的方法,需要阻塞等待,那么我們有沒有辦法解決呢?讓它異步執(zhí)行,下面我會(huì)詳解異步及實(shí)現(xiàn),需要的可以參考一下
    2022-09-09
  • Java中hashMap遍歷的9種方式

    Java中hashMap遍歷的9種方式

    hashMap是非常重要的容器類,本文主要介紹了Java中hashMap遍歷的9種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • 詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎

    詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎

    這篇文章主要介紹了詳解OAuth2 Token 一定要放在請(qǐng)求頭中嗎,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java通過反射機(jī)制將對(duì)象封裝成JSON和JsonArray格式

    Java通過反射機(jī)制將對(duì)象封裝成JSON和JsonArray格式

    這篇文章主要介紹了Java通過反射機(jī)制將對(duì)象封裝成JSON和JsonArray格式,JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)實(shí)體類,都能夠知道這個(gè)類的所有屬性和方法,需要的朋友可以參考下
    2023-10-10
  • Java服務(wù)實(shí)現(xiàn)開啟Debug遠(yuǎn)程調(diào)試

    Java服務(wù)實(shí)現(xiàn)開啟Debug遠(yuǎn)程調(diào)試

    文章介紹如何通過JVM參數(shù)開啟Java服務(wù)遠(yuǎn)程調(diào)試,便于在線上排查問題,在IDEA中配置客戶端連接,實(shí)現(xiàn)無需頻繁部署的調(diào)試,提升效率
    2025-09-09
  • 詳解如何使用maven生成可以執(zhí)行的jar

    詳解如何使用maven生成可以執(zhí)行的jar

    這篇文章主要介紹了詳解如何使用maven生成可以執(zhí)行的jar,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • JavaCV實(shí)現(xiàn)人臉檢測功能

    JavaCV實(shí)現(xiàn)人臉檢測功能

    這篇文章主要為大家詳細(xì)介紹了JavaCV實(shí)現(xiàn)人臉檢測功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn)

    Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn)

    這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 對(duì)比Java設(shè)計(jì)模式編程中的狀態(tài)模式和策略模式

    對(duì)比Java設(shè)計(jì)模式編程中的狀態(tài)模式和策略模式

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的狀態(tài)模式和策略模式對(duì)比,文中列舉了兩種模式的相似點(diǎn)和不同點(diǎn),并都舉了代碼的實(shí)例作為參照,需要的朋友可以參考下
    2016-04-04

最新評(píng)論

灵台县| 锡林浩特市| 舒城县| 象山县| 保靖县| 五寨县| 高阳县| 濮阳市| 浦江县| 辽中县| 威信县| 莎车县| 许昌县| 兴国县| 哈密市| 綦江县| 青阳县| 平安县| 黑龙江省| 宽甸| 宜昌市| 报价| 繁昌县| 延长县| 濮阳县| 依安县| 庆安县| 汉阴县| 宜章县| 南川市| 恩平市| 广丰县| 离岛区| 阿勒泰市| 轮台县| 南昌县| 怀远县| 吴忠市| 商南县| 抚顺县| 漳平市|