欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實(shí)現(xiàn)配置文件加密的方案分享

 更新時(shí)間:2023年11月23日 16:15:02   作者:Rise同志  
項(xiàng)目的數(shù)據(jù)庫密碼、redis 密碼等明文展示在配置文件中會(huì)有潛在的風(fēng)險(xiǎn),因此采用合適的安全防護(hù)措施是有必要的,下面小編就為大家介紹一下SpringBoot中配置文件加密的方法,希望對(duì)大家有所幫助

1.為什么要對(duì)配置文件關(guān)鍵信息進(jìn)行加密

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false
    username: root
    password: root
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456

項(xiàng)目的數(shù)據(jù)庫密碼、redis 密碼等明文展示在配置文件中會(huì)有潛在的風(fēng)險(xiǎn),比如源碼泄露,或者配置文件暴露,會(huì)導(dǎo)致相關(guān)密碼泄露,造成安全風(fēng)險(xiǎn),因此采用合適的安全防護(hù)措施是有必要的。

2.配置文件加密方案

方案1:jasypt

jasypt 是一個(gè)開源的工具類,可以方便的對(duì) SpringBoot 配置文件中的配置項(xiàng)進(jìn)行對(duì)稱加密

集成步驟

1.1 引入Jar包

在maven中引入如下依賴

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

1.2 對(duì)敏感數(shù)據(jù)生成加密字符串

有以下三種加密方式,請(qǐng)根據(jù)自己需求和項(xiàng)目情況自行選擇:

方式1: 通過加密工具類生成(以下為代碼實(shí)例,可以直接使用)

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;

/**
 * 使用Jasypt對(duì)配置文件進(jìn)行加密
 */
public class JasyptUtil {

    /**
     * 加密算法 加密解密保證同一種算法
     * jasypt3.0后,默認(rèn)支持的算法為 PBEWITHHMACSHA512ANDAES_256,這種算法安全性更高,但是需要 Java JDK 1.9+或添加JCE(Java Cryptography Extension 無限強(qiáng)度權(quán)限策略文件)
     * 使用PBEWithMD5AndDES算法即可
     */
    private static final String algorithm ="PBEWithMD5AndDES";
    //密鑰,對(duì)稱加密使用同一個(gè)密鑰進(jìn)行加解密,密鑰自己定義,注意保管
    private static final String key ="test";

    public static void main(String[] args) {
        //加密方法示例
        String encryptInfo = encrypt("root");
        System.out.println(encryptInfo);
        //解密方法示例
        String decryptInfo = decrypt(encryptInfo);
        System.out.println(decryptInfo);
    }

    /**
     * 加密
     *
     * @param value 明文
     * @return
     */
    public static String encrypt(String value) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        // 指定算法
        config.setAlgorithm(algorithm);
        // 指定秘鑰
        config.setPassword(key);
        encryptor.setConfig(config);
        // 加密數(shù)據(jù)
        return encryptor.encrypt(value);
    }

    /**
     * 解密
     *
     * @param value 密文
     * @return
     */
    public static String decrypt(String value) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
        config.setAlgorithm(algorithm);
        config.setPassword(key);
        encryptor.setConfig(config);
        // 解密數(shù)據(jù)
        return encryptor.decrypt(value);
    }
}

方式2: 執(zhí)行 jar包,通過命令行的模式獲?。ú煌扑],操作起來不夠方便)

java -cp ./jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password="test" algorithm=PBEWithMD5AndDES input=root

輸出結(jié)果:

Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.161-b12

----ARGUMENTS-------------------

input: root
algorithm: PBEWithMD5AndDES
password: ADUMDFUOV7834*

----OUTPUT----------------------

dXTlEeOApsY5oCeCQEo4Gg==

注:

  • password:用來加密的密鑰
  • algorithm:加密算法 PBEWithMD5AndDES/PBEWITHHMACSHA512ANDAES_256。使用PBEWithMD5AndDES即可
  • input:后接的屬性為需要加密的參數(shù)
  • OUTPUT輸出的值即為加密后的值

方式三: 使用Maven插件(推薦,使用起來比較快捷)

Maven中引入jasypt插件

<plugin>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-maven-plugin</artifactId>
    <version>3.0.3</version>
    <configuration>
        <path>file:src/main/resources/application.yml</path>
    </configuration>
</plugin>

注:

path標(biāo)簽中的路徑請(qǐng)根據(jù)自己配置文件路徑配置

修改配置文件

server:
  port: 8030
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    username: DEC(root)
    password: DEC(root)
jasypt:
   encryptor:
     password: test
  • 需要加密的數(shù)據(jù)使用DEC()包起來
  • password為密鑰自定義

Maven加密命令

mvn jasypt:encrypt -Djasypt.encryptor.password=test

執(zhí)行完該命令之后,DEC中的內(nèi)容會(huì)自動(dòng)被替換為ENC(加密內(nèi)容)

Maven解密命令

mvn jasypt:decrypt -Djasypt.encryptor.password=test

1.3 使用

配置文件中按下圖添加密鑰和需要加密的屬性之后,啟動(dòng)時(shí)會(huì)自動(dòng)對(duì)敏感數(shù)據(jù)進(jìn)行解密

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
    username: ENC(加密之后的屬性)
    password: ENC(加密之后的屬性)
jasypt:
   encryptor:
     password: 自定義的密鑰

1.4 安全事項(xiàng)

由于該方案采用的是對(duì)稱加密,一旦泄露密鑰,相關(guān)密碼將暴露,將密鑰配置在配置文件中,非常不安全,推薦將密鑰添加到啟動(dòng)命令中,降低暴露風(fēng)險(xiǎn)

java -jar demo.jar --Djasypt.encryptor.password=test

以上就是SpringBoot實(shí)現(xiàn)配置文件加密的方案分享的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot配置文件加密的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Sentinel流量控制限流框架的原理與使用

    詳解Sentinel流量控制限流框架的原理與使用

    Sentinel 是一個(gè)高可用、高擴(kuò)展、高穩(wěn)定性的開源流量控制和熔斷降級(jí)框架,可以在分布式系統(tǒng)中實(shí)現(xiàn)實(shí)時(shí)的流量控制,下面就來和大家聊聊是具體如何操作的吧
    2023-05-05
  • springboot 監(jiān)控管理模塊搭建的方法

    springboot 監(jiān)控管理模塊搭建的方法

    本篇文章主要介紹了springboot 監(jiān)控管理模塊搭建的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 解決IDEA2020.1版本不兼容Lombok的問題

    解決IDEA2020.1版本不兼容Lombok的問題

    這篇文章主要介紹了解決IDEA2020.1版本不兼容Lombok的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Nett分布式分隔符解碼器邏輯源碼剖析

    Nett分布式分隔符解碼器邏輯源碼剖析

    這篇文章主要為大家介紹了Nett分布式分隔符解碼器邏輯源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java使用fastjson對(duì)String、JSONObject、JSONArray相互轉(zhuǎn)換

    Java使用fastjson對(duì)String、JSONObject、JSONArray相互轉(zhuǎn)換

    這篇文章主要介紹了Java使用fastjson對(duì)String、JSONObject、JSONArray相互轉(zhuǎn)換,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java服務(wù)器端微信、支付寶支付和退款功能

    java服務(wù)器端微信、支付寶支付和退款功能

    這篇文章主要為大家詳細(xì)介紹了java服務(wù)器端微信、支付寶支付和退款功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Java RabbitMQ的三種Exchange模式

    Java RabbitMQ的三種Exchange模式

    這篇文章主要介紹了Java RabbitMQ的三種Exchange模式,分別為Direct模式、Fanout模式、Topic模式,Rabbit的Direct Exchange模式是指消息發(fā)送導(dǎo)RouteKey中指定的Queue,Direct模式可以使用Rabbit自帶的Exchange
    2022-08-08
  • java中public class與class的區(qū)別詳解

    java中public class與class的區(qū)別詳解

    以下是對(duì)java中public class與class的區(qū)別進(jìn)行了分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • java項(xiàng)目如何引入其他jar包

    java項(xiàng)目如何引入其他jar包

    通常在lib文件夾中存放從外部引入的jar包,所以把JAR文件復(fù)制進(jìn)去。 然后修改編譯腳本,不需要去編譯tool文件夾里面的java類,直接把jar包添加到classpath,下文將詳細(xì)介紹
    2021-10-10
  • Spring MVC的文件上傳和下載以及攔截器的使用實(shí)例

    Spring MVC的文件上傳和下載以及攔截器的使用實(shí)例

    這篇文章主要介紹了Spring MVC的文件上傳和下載以及攔截器的使用實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08

最新評(píng)論