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

Springboot采用jasypt加密配置的項目實踐

 更新時間:2024年12月06日 08:30:21   作者:竹鹿眾猿  
本文主要介紹了在Spring Boot項目中使用Jasypt對配置文件中的敏感信息進行加密,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

在以往的多數(shù)項目中,配置文件中的數(shù)據(jù)庫密碼、redis密碼、nacos密碼等敏感性信息一般是以明文形式存在,存在泄露的風(fēng)險,因此,對敏感信息加固是很有必要,加固的一個重要環(huán)節(jié)就是對重要信息做加密處理。

這里簡單的介紹一下Jasypt加密

一、Jasypt簡介

Jasypt 是一個 java 庫,可以使開發(fā)者不需要太多操作來給 Java 項目添加基本加密功能,而且不需要知道加密原理。Jasypt 為開發(fā)人員提供了一種簡單易用加密功能,包括:密碼認(rèn)證、字符串加密等。

二、運用場景

一般來說,項目配置文件里,所有涉及信息安全的配置項(或字段)都應(yīng)該做處理,典型的比如:

  • 數(shù)據(jù)庫密碼,如mysql、oracle
  • 緩存中間件的密碼,如 redis、mongodb
  • 其他中間件,如消息中間件、zk、nacos等
  • 第三方服務(wù)的,如appid、 Access_Key

三、整合Jasypt

官方示例:GitHub - ulisesbocchio/jasypt-spring-boot-samples: Sample apps using jasypt-spring-boot

3.1.環(huán)境配置

  • ?SpringBoot 2.0以上
  • ?Jasypt 3.0.5
  • ?jdk1.8

3.2.添加依賴

在項目 pom.xml 添加 Jasypt 相關(guān)依賴。

<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>

3.3.添加Jasypt配置

jasypt:
  encryptor:
    password: 123456
    algorithm: PBEWITHHMACSHA512ANDAES_256
    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
    salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
    string-output-type: base64
    provider-name: SunJCE
    pool-size: 1
    key-obtention-iterations: 1000
    property:
      # 標(biāo)識為加密屬性的前綴
      prefix: ENC(
      # 標(biāo)識為加密屬性的后綴
      suffix: )

2.4.編寫加/解密工具類

package com.bexk.util;

import java.util.Base64;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * @Description: 加解密密算法
 * @Author developer
 * @Date 2024/10/11 9:48 上午
 */
public class JasyptUtil {

    /**
     * PBE 算法
     */
    public static final String PBE_ALGORITHMS_MD5_DES = "PBEWITHMD5ANDDES";
    public static final String PBE_ALGORITHMS_SHA512_AES_256 = "PBEWithHMACSHA512ANDAES_256";

    private JasyptUtil() {
    }

    /**
     * 加密
     *
     * @param encryptedStr 加密字符串
     * @param password     鹽值
     * @return
     */
    public static String encrypt(String encryptedStr, String password) {
        return encrypt(encryptedStr, PBE_ALGORITHMS_MD5_DES, password);
    }

    /**
     * 加密
     *
     * @param encryptedStr 加密字符串
     * @param algorithm    加密算法
     * @param password     鹽值
     * @return
     */
    public static String encrypt(String encryptedStr, String algorithm, String password) {        
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();

        // 指定加密算法
        config.setAlgorithm(algorithm);
        // 加密鹽值
        config.setPassword(password);
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        encryptor.setConfig(config);

        // 加密
        return encryptor.encrypt(encryptedStr);
    }

    /**
     * 解密
     *
     * @param decryptStr 解密字符串
     * @param password   鹽值
     * @return
     */
    public static String decrypt(String decryptStr, String password) {
        return decrypt(decryptStr, PBE_ALGORITHMS_MD5_DES, password);
    }

    /**
     * 解密
     *
     * @param decryptStr 解密字符串
     * @param algorithm  指定解密算法
     * @param password   鹽值
     * @return
     */
    public static String decrypt(String decryptStr, String algorithm, String password) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        EnvironmentPBEConfig config = new EnvironmentPBEConfig();

        // 指定解密算法:解密算法要與加密算法一一對應(yīng)
        config.setAlgorithm(algorithm);
        // 加密秘鑰
        config.setPassword(password);
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        encryptor.setConfig(config);

        // 解密
        return encryptor.decrypt(decryptStr);
    }

}

修改配置文件

如圖,通過編寫加/解密工具類得到對應(yīng)的加密結(jié)果,然后將配置文件的原始明文密碼替換成上一步對應(yīng)的結(jié)果,并通過 ENC(加密結(jié)果) 包裹起來。

加密前:

加密后:

2.5.自定義加密屬性前綴和后綴

如果您只想為加密屬性使用不同的前綴/后綴,則可以繼續(xù)使用所有默認(rèn)實現(xiàn),只需覆蓋 application.yml (或 application.properties)中的以下屬性(property):

jasypt:
  encryptor:
    property:
      prefix: "ENC@["
      suffix: "]"

2.6.防止密碼泄露措施

若使用的是默認(rèn)的加密規(guī)則,會讓當(dāng)自定義加密鹽值(jasypt.encryptor.password) 泄漏,可能變得不安全。那么如何進一步防止密碼泄露呢?

2.61.自定義加密器

自定義加密規(guī)則非常簡單,只需要提供自定義的加密器配置類,然后通過jasypt.encryptor.bean配置指定加密配置類即可。

@Bean(name = "encryptorBean")
    static public StringEncryptor stringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("password");
        config.setAlgorithm("PBEWithHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }

也將自定義加密器添加到 Spring IoC 容器中。

@Configuration
public class JasyptConfig {
    /**
     * 加解密鹽值
     */
    @Value("${jasypt.encryptor.password}")
    private String password;

    // @Bean("jasyptStringEncryptor")
    @Bean("encryptorBean")
    public StringEncryptor myStringEncryptor() {
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("password");
        config.setAlgorithm("PBEWithHMACSHA512ANDAES_256");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor;
    }
}

修改配置文件

jasypt:
  encryptor:
    # 指定加解密bean的名稱,默認(rèn)jasyptStringEncryptor
    bean: encryptorBean
    # 鹽值
    password: 123456
    #省略其它

注意事項:Jasypt默認(rèn)加解密器bean的Name為 jasyptStringEncryptor,若不想在配置文件中指定自定義加密器名稱,需將自定義加密器bean的Name設(shè)置為jasyptStringEncryptor,否則將不生效。

Springcloud項目最好不要采用自定義,容易出現(xiàn)找不到bean的問題。

2.6.2通過環(huán)境變量指定加密鹽值

方式一:直接作為程序啟動時的命令行參數(shù)

java -jar test.jar --jasypt.encryptor.password=鹽值

方式二:直接作為程序啟動時的應(yīng)用環(huán)境變量

java -Djasypt.encryptor.password=鹽值 -jar test.jar

如果通過Docker部署,請在ENTRYPOINT加上對應(yīng)參數(shù),比如:

ENTRYPOINT ["java","-Djasypt.encryptor.password=test","-jar","test.jar"]

方式三:直接作為系統(tǒng)環(huán)境變量

1. 設(shè)置系統(tǒng)環(huán)境變量 :JASYPT_PWD

   在windows系統(tǒng)設(shè)置:

在eclipse設(shè)置,如圖:

在idea中設(shè)置,需要通過VM options設(shè)置,如圖:

在linux系統(tǒng)設(shè)置

#打開全局配置文件:      
sudo vim /etc/profile
#編輯全局配置文件:      
export JASYPT_PWD=nrmZtkF7T0kjG
#重載profile配置文件:  
source /etc/profile

2. Spring Boot的項目配置文件指定系統(tǒng)環(huán)境變量:

jasypt:
  encryptor:
    password: ${JASYPT_PWD:123456}

總結(jié)

本文介紹了如何在Springboot項目中使用Jasypt對配置文件中的敏感信息進行加密,包括環(huán)境配置、依賴添加、配置設(shè)置、自定義加密器和使用環(huán)境變量管理鹽值,以提升項目的安全性。

到此這篇關(guān)于Springboot采用jasypt加密配置的項目實踐的文章就介紹到這了,更多相關(guān)Springboot jasypt加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 日志配置方法(超詳細)

    Spring Boot 日志配置方法(超詳細)

    默認(rèn)情況下,Spring Boot會用Logback來記錄日志,并用INFO級別輸出到控制臺。下面通過本文給大家介紹Spring Boot 日志配置方法詳解,感興趣的朋友參考下吧
    2017-07-07
  • JAVA8 lambda表達式權(quán)威教程

    JAVA8 lambda表達式權(quán)威教程

    本文主要給大家講解Java8中最重要的一個特征之一lambda表達式,本文通過實例圖文解說給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友跟隨小編一起學(xué)習(xí)下吧
    2021-05-05
  • java數(shù)據(jù)類型與變量的安全性介紹

    java數(shù)據(jù)類型與變量的安全性介紹

    這篇文章主要介紹了java數(shù)據(jù)類型與變量的安全性介紹,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • Java多線程Semaphore工具的使用詳解

    Java多線程Semaphore工具的使用詳解

    Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護一定數(shù)量的許可證來限制對共享資源的訪問,許可證的數(shù)量就是可以同時訪問共享資源的線程數(shù)目,需要的朋友可以參考下
    2023-05-05
  • java生成二維碼并且給二維碼添加logo

    java生成二維碼并且給二維碼添加logo

    這篇文章主要介紹了java生成二維碼并且給二維碼添加logo的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Servlet+MyBatis項目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議

    Servlet+MyBatis項目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議

    今天小編就為大家分享一篇關(guān)于Servlet+MyBatis項目轉(zhuǎn)Spring Cloud微服務(wù),多數(shù)據(jù)源配置修改建議,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 分析設(shè)計模式之模板方法Java實現(xiàn)

    分析設(shè)計模式之模板方法Java實現(xiàn)

    所謂模板方法模式,就是一個對模板的應(yīng)用,就好比老師出試卷,每個人的試卷都是一樣的,這個原版試卷就是一個模板,可每個人寫在試卷上的答案都是不一樣的,這就是模板方法模式。它的主要用途在于將不變的行為從子類搬到超類,去除了子類中的重復(fù)代碼
    2021-06-06
  • 如何用nacos搭建微服務(wù)注冊配置中心

    如何用nacos搭建微服務(wù)注冊配置中心

    這篇文章主要介紹了如何用nacos搭建微服務(wù)注冊配置中心問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理

    關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理

    這篇文章主要介紹了關(guān)于SpringBoot使用@ExceptionHandler注解局部異常處理,SpringBoot提供了多種方式來處理異常,在本文中,我們將介紹SpringBoot中的@ExceptionHandler注解,演示如何使用它進行局部異常處理
    2023-07-07
  • java實現(xiàn)的導(dǎo)出Excel工具類實例

    java實現(xiàn)的導(dǎo)出Excel工具類實例

    這篇文章主要介紹了java實現(xiàn)的導(dǎo)出Excel工具類,結(jié)合具體實例形式分析了java導(dǎo)出Excel導(dǎo)出并生成Excel表格相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2017-10-10

最新評論