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

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

 更新時間:2024年12月06日 08:30:21   作者:竹鹿眾猿  
本文主要介紹了在Spring Boot項目中使用Jasypt對配置文件中的敏感信息進行加密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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)文章

  • Java虛擬機調(diào)用Java主類的main()方法

    Java虛擬機調(diào)用Java主類的main()方法

    這篇文章主要介紹了Java虛擬機調(diào)用Java主類的main()方法,前一篇文章我們介紹了關(guān)于Java虛擬機HotSpot
    2021-11-11
  • SpringBoot中4種數(shù)據(jù)水平分片策略

    SpringBoot中4種數(shù)據(jù)水平分片策略

    數(shù)據(jù)水平分片作為一種水平擴展策略,通過將數(shù)據(jù)分散到多個物理節(jié)點上,有效解決了存儲容量和性能瓶頸問題,下面小編就來和大家分享4種數(shù)據(jù)分片策略吧
    2025-06-06
  • Hibernate+JDBC實現(xiàn)批量插入、更新及刪除的方法詳解

    Hibernate+JDBC實現(xiàn)批量插入、更新及刪除的方法詳解

    這篇文章主要介紹了Hibernate+JDBC實現(xiàn)批量插入、更新及刪除的方法,結(jié)合實例形式較為詳細(xì)的分析了Hibernate與JDBC針對數(shù)據(jù)庫的批量操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-11-11
  • Java基于IO流讀取文件的方法

    Java基于IO流讀取文件的方法

    這篇文章主要介紹了Java基于IO流讀取文件的方法,涉及Java文件流操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Java設(shè)計模式之原型模式的示例詳解

    Java設(shè)計模式之原型模式的示例詳解

    原型模式(Prototype Pattern)指使用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。本文將通過案例詳細(xì)講解一下原型模式,感興趣的可以了解一下
    2022-02-02
  • JDK的具體安裝步驟(帶圖帶解釋巨詳細(xì))

    JDK的具體安裝步驟(帶圖帶解釋巨詳細(xì))

    Java是一種廣泛使用的編程語言,許多應(yīng)用程序和系統(tǒng)都依賴于它,如果您想進行Java編程或運行Java應(yīng)用程序,首先需要安裝Java開發(fā)工具包(JDK),這篇文章主要給大家介紹了關(guān)于JDK具體安裝步驟的相關(guān)資料,文中介紹的方法帶圖帶解釋巨詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Mybatis-plus selectByMap條件查詢方式

    Mybatis-plus selectByMap條件查詢方式

    這篇文章主要介紹了Mybatis-plus selectByMap條件查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • JDK14性能管理工具之jstack使用介紹

    JDK14性能管理工具之jstack使用介紹

    jstack工具主要用來打印java堆棧信息,主要是java的class名字,方法名,字節(jié)碼索引,行數(shù)等信息。這篇文章主要介紹了JDK14性能管理工具之jstack使用介紹,需要的朋友可以參考下
    2020-05-05
  • jenkins按模塊進行構(gòu)建遇到的問題及解決方案

    jenkins按模塊進行構(gòu)建遇到的問題及解決方案

    這篇文章主要介紹了jenkins按模塊進行構(gòu)建的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • springboot整合日志處理Logback的實現(xiàn)示例

    springboot整合日志處理Logback的實現(xiàn)示例

    Logback是由log4j創(chuàng)始人設(shè)計的又一個開源日志組件,本文主要介紹了springboot整合日志處理Logback,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01

最新評論

通州市| 和平县| 镇巴县| 德江县| 赤峰市| 云安县| 扎囊县| 永登县| 裕民县| 富锦市| 衡阳市| 竹溪县| 富民县| 皮山县| 湟源县| 洛川县| 邻水| 长武县| 同心县| 崇信县| 博客| 裕民县| 香港 | 定边县| 屯门区| 玉田县| 连南| 芒康县| 长顺县| 枝江市| 姜堰市| 皮山县| 黄石市| 昌平区| 阳西县| 阿荣旗| 富顺县| 南通市| 开江县| 怀柔区| 辉县市|