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

SpringBoot使用Jasypt對(duì)配置文件和數(shù)據(jù)庫(kù)密碼加密

 更新時(shí)間:2024年02月28日 09:57:04   作者:skywsp  
在做數(shù)據(jù)庫(kù)敏感信息保護(hù)時(shí),應(yīng)加密存儲(chǔ),本文就來(lái)介紹一下SpringBoot使用Jasypt對(duì)配置文件和數(shù)據(jù)庫(kù)密碼加密,具有一定的參考價(jià)值,感興趣的可以了解一下

在做數(shù)據(jù)庫(kù)敏感信息保護(hù)時(shí),Web應(yīng)用配置的賬號(hào)密碼,在配置文件應(yīng)加密存儲(chǔ),禁止使用明文賬號(hào)密碼,這時(shí)我們可以使用Jasypt加密來(lái)實(shí)現(xiàn)需求。

一、Jasypt簡(jiǎn)介

Jasypt是一個(gè)Java簡(jiǎn)易加密庫(kù),用于加密配置文件中的敏感信息,如數(shù)據(jù)庫(kù)密碼。jasypt庫(kù)與springboot集成,在實(shí)際開發(fā)中非常方便。

1、Jasypt Spring Boot 為 spring boot 應(yīng)用程序中的屬性源提供加密支持,出于安全考慮,Spring boot 配置文件中的敏感信息通常需要對(duì)它進(jìn)行加密/脫敏處理,盡量不使用明文,要實(shí)現(xiàn)這一點(diǎn),辦法有很多,自己手動(dòng)對(duì)敏感信息進(jìn)行加解密也是可以的。

2、在程序界有需求就有人奉獻(xiàn),Jasypt 開源安全框架就是專門用于處理 Spring boot 屬性加密的,在配置文件中使用特定格式直接配置密文,然后應(yīng)用啟動(dòng)的時(shí)候,Jasypt 會(huì)自動(dòng)將密碼解密成明文供程序使用。

1)Jasypt 加密屬性配置格式:

spring:
  datasource:
    password: ENC(o6L5p3ymfSMiscyR9CPio4NfGPg+W9==)

ENC() 就是它的標(biāo)識(shí),程序啟動(dòng)的時(shí)候,會(huì)自動(dòng)解密其中的內(nèi)容,如果解密失敗,則會(huì)報(bào)錯(cuò)。
2)所以獲取這些屬性值和平時(shí)沒(méi)有區(qū)別,直接使用如 @Value(“${spring.datasource.password}”) 獲取即可,取值并不需要特殊處理。

3、jasypt 同一個(gè)密鑰(secretKey)對(duì)同一個(gè)內(nèi)容執(zhí)行加密,每次生成的密文都是不一樣的,但是根據(jù)根據(jù)這些密文解密成原內(nèi)容都是可以的.

4、Jasypt 官方使用文檔:http://www.jasypt.org/
GitHub地址:https://github.com/ulisesbocchio/jasypt-spring-boot。

二、集成方法

官網(wǎng)上推薦的集成到SpringBoot項(xiàng)目中,有3種方法分別是:

  • 如果使用@SpringBootApplication或@EnableAutoConfiguration,則僅需要添加jasypt-spring-boot-starter啟動(dòng)器jar到您的類路徑中即可,它自動(dòng)會(huì)在整個(gè) Spring 環(huán)境中啟用可加密屬性。
  • 添加jasypt-spring-boot到您的類路徑并添加@EnableEncryptableProperties到您的主配置類以在整個(gè) Spring 環(huán)境中啟用可加密屬性。
  • 添加jasypt-spring-boot到您的類路徑并使用@EncrytablePropertySource注解聲明單獨(dú)的可加密屬性源。

2.1 方式一

在Springboot應(yīng)用程序中,如果使用了@SpringBootApplication 或者@EnableAutoConfiguration注解,則可以在pom文件中添加jasypt-spring-boot-starter依賴,然后就可以在整個(gè)Spring環(huán)境中使用jasypt對(duì)屬性進(jìn)行加解密操作(屬性包括:系統(tǒng)屬性、環(huán)境屬性、命令行參數(shù)、application.properties、application-*.properties、yml屬性以及任何其他屬性源)。

<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
    <!-- JDK9+用3.x版本,JDK8用2.x版本 -->
    <!-- 倉(cāng)庫(kù):https://repo1.maven.org/maven2/com/github/ulisesbocchio/jasypt-spring-boot-starter/ -->
	<version>2.1.2</version>
</dependency>

2.2 方式二

如果項(xiàng)目中沒(méi)有使用到@SpringBootApplication 或者@EnableAutoConfiguration 自動(dòng)配置注解,則可以通過(guò)以下兩個(gè)步驟完成對(duì)Jasypt的集成。

步驟一:pom文件引入jasypt-spring-boot依賴

<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot</artifactId>
    <!-- JDK9+用3.x版本,JDK8用2.x版本 -->
    <!-- 倉(cāng)庫(kù):https://repo1.maven.org/maven2/com/github/ulisesbocchio/jasypt-spring-boot-starter/ -->
	<version>2.1.2</version>
</dependency>

步驟二:在配置類中,添加@EnableEncryptableProperties注解,示例如下:

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;

@SpringBootApplication
@EnableEncryptableProperties
public class MySpringBootApp {
    public static void main(String[] args) {
        SpringApplication.run(MySpringBootApp.class, args);
    }
}

通過(guò)這種方式,你的項(xiàng)目一樣可以集成Jasypt,并且可加密屬性也可以在整個(gè)Spring環(huán)境中啟用屬性包括:系統(tǒng)屬性、環(huán)境屬性、命令行參數(shù)、application.properties、application-*.properties、yml屬性以及任何其他屬性源)。

2.3 方式三

如果項(xiàng)目中沒(méi)有使用到@SpringBootApplication 或者@EnableAutoConfiguration 自動(dòng)配置注解,又不想在整個(gè)Spring環(huán)境中啟用加密的屬性,則可以使用該種方式,具體步驟如下:

步驟一:pom文件引入jasypt-spring-boot依賴

<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot</artifactId>
    <!-- JDK9+用3.x版本,JDK8用2.x版本 -->
    <!-- 倉(cāng)庫(kù):https://repo1.maven.org/maven2/com/github/ulisesbocchio/jasypt-spring-boot-starter/ -->
	<version>2.1.2</version>
</dependency>

步驟二、在配置類中,使用@EncryptablePropertySource注解添加任意數(shù)量想要生效加密屬性的配置文件路徑,與Spring中@PropertySource注解的使用類似,示例如下:

@Configuration
@EncryptablePropertySource(name = "EncryptedProperties", value = "classpath:encrypted.properties")
public class MyApplication {
    ...
}

同時(shí),還可以使用@EncryptablePropertySources 注解對(duì)@EncryptablePropertySource配置進(jìn)行分組,示例如下:

@Configuration
@EncryptablePropertySources({@EncryptablePropertySource("classpath:encrypted.properties"),
                             @EncryptablePropertySource("classpath:encrypted2.properties")})
public class MyApplication {
    ...
}

說(shuō)明:從Jasypt 1.8版本開始,@EncryptablePropertySource注解支持配置YAML文件。

三、Springboot整合Jasypt實(shí)戰(zhàn)

Dmo源碼請(qǐng)點(diǎn)這里!

3.1 引入依賴

本Demo使用JDK8,所有依賴2.1.2版本

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.3.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3.2 準(zhǔn)備加密后的數(shù)據(jù)

    @Test
    public void test() {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();

        // 加密秘鑰(鹽值)
        textEncryptor.setPassword("jasyptSalt123");

        // 對(duì)賬號(hào)加密
        String encUsername = textEncryptor.encrypt("zhangsan");
        System.out.println(encUsername);

        // 對(duì)密碼加密
        String encPassword = textEncryptor.encrypt("abc123@test");
        System.out.println(encPassword);
    }

3.3 配置文件使用加密數(shù)據(jù)

spring:
  datasource:
    # 明文賬號(hào)密碼
    username: zhangsan
    password: abc123@test

    # 加密后的賬號(hào)密碼
    encUsername: ENC(CsXfWspTjwzJ99zeeXhNAk7Jk0/XbeTp)
    encPassword: ENC(SZqTzbJYCOCErUYWDHdSrXC1Mb/wNYSB)

# jasypt加密秘鑰,需要從配置文件中刪除,改為在項(xiàng)目啟動(dòng)命令上配置環(huán)境參數(shù)
jasypt:
  encryptor:
    password: jasyptSalt123

3.4 直接獲取解密數(shù)據(jù)

@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class SamProperties {
    private String username;
    private String password;

    // 配置注入前會(huì)自動(dòng)解密
    private String encUsername;
    private String encPassword;
}

四、拓展

4.1 關(guān)于加解密秘鑰如何存儲(chǔ)

如果秘鑰寫在代碼或者配置文件,一旦代碼泄露,那別人就可以使用秘鑰解密我們的密文,這樣對(duì)敏感信息加密的作用就不存在了,因此,秘鑰不能以明文形式存儲(chǔ)在代碼或者配置文件中,應(yīng)該在應(yīng)用部署時(shí)通過(guò)變量傳入。

java -Djasypt.encryptor.password=秘鑰 -jar xxx.jar

或:

java -jar xxx.jar --jasypt.encryptor.password=秘鑰

4.2 使用jasypt3.0啟動(dòng)時(shí)報(bào)

使用jasypt3.0啟動(dòng)時(shí)報(bào):Failed to bind properties under ‘xxx.xxx.xxx’ to java.lang.String

官方描述,3.0后默認(rèn)支持的算法為PBEWITHHMACSHA512ANDAES_256 ,該種加密方式由sha512 加 AES 高級(jí)加密組成,需要JDK1.9以上支持或者添加JCE(Java Cryptography Extension無(wú)限強(qiáng)度權(quán)限策略文件)支持,否則運(yùn)行會(huì)出現(xiàn)錯(cuò)誤。

4.2.1 解決方案1,降低版本
降低jasypt的版本 - 使用2.x的版本

4.2.2 解決方案2,修改算法
將加密算法替換成PBEWithMD5AndDES 算法,并配置iv-generator-classname: 為org.jasypt.iv.NoIvGenerator值

到此這篇關(guān)于SpringBoot使用Jasypt對(duì)配置文件和數(shù)據(jù)庫(kù)密碼加密的文章就介紹到這了,更多相關(guān)SpringBoot Jasypt加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java list 比較詳解及實(shí)例

    java list 比較詳解及實(shí)例

    這篇文章主要介紹了java list 比較詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • SpringCloud之Admin服務(wù)監(jiān)控實(shí)現(xiàn)流程示例詳解

    SpringCloud之Admin服務(wù)監(jiān)控實(shí)現(xiàn)流程示例詳解

    這篇文章主要為大家介紹了SpringCloud之Admin服務(wù)監(jiān)控流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 簡(jiǎn)單實(shí)現(xiàn)Java通訊錄系統(tǒng)

    簡(jiǎn)單實(shí)現(xiàn)Java通訊錄系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了如何簡(jiǎn)單實(shí)現(xiàn)Java通訊錄系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java中List排序的3種常見(jiàn)方法總結(jié)

    Java中List排序的3種常見(jiàn)方法總結(jié)

    在Java編程中List對(duì)象的排序是一個(gè)常見(jiàn)的需求,List接口提供了多種排序方法,這篇文章主要給大家介紹了關(guān)于Java中List排序的3種常見(jiàn)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Java刪除ArrayList中的重復(fù)元素的兩種方法

    Java刪除ArrayList中的重復(fù)元素的兩種方法

    在Java編程中,ArrayList是一種常用的集合類,它允許我們存儲(chǔ)一組元素,在某些情況下,我們可能需要移除其中重復(fù)的元素,只保留唯一的元素,下面介紹兩種常見(jiàn)的刪除ArrayList中重復(fù)元素的方法,需要的朋友可以參考下
    2024-12-12
  • Spring Cloud 動(dòng)態(tài)刷新配置信息教程詳解

    Spring Cloud 動(dòng)態(tài)刷新配置信息教程詳解

    這篇文章主要介紹了Spring Cloud 動(dòng)態(tài)刷新配置信息的教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Maven打包JavaWeb項(xiàng)目的兩種實(shí)現(xiàn)方式

    Maven打包JavaWeb項(xiàng)目的兩種實(shí)現(xiàn)方式

    介紹了兩種Maven打包Web項(xiàng)目的方式:通過(guò)Eclipse和通過(guò)命令行,Eclipse方式包括清理、打包、跳過(guò)測(cè)試、輸入?Goals?等步驟,命令行方式包括進(jìn)入項(xiàng)目目錄、執(zhí)行?clean?和?package?命令、跳過(guò)測(cè)試等步驟,注意事項(xiàng)包括確保有JDK環(huán)境、正確配置pom.xml文件和修改版本號(hào)
    2025-02-02
  • redis分布式鎖的原理及代碼實(shí)例

    redis分布式鎖的原理及代碼實(shí)例

    這篇文章主要介紹了redis分布式鎖的原理及代碼實(shí)例,Redis作為一款高性能內(nèi)存數(shù)據(jù)庫(kù),其提供了一種非常實(shí)用的分布式鎖解決方案,可以幫助開發(fā)人員輕松地實(shí)現(xiàn)分布式鎖功能,對(duì)于分布式系統(tǒng)的開發(fā)和維護(hù),具有非常大的實(shí)用價(jià)值,需要的朋友可以參考下
    2024-01-01
  • Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解

    Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解

    這篇文章主要為大家介紹了Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 200行Java代碼編寫一個(gè)計(jì)算器程序

    200行Java代碼編寫一個(gè)計(jì)算器程序

    本篇文章給大家分享的只用200行java代碼,實(shí)現(xiàn)一個(gè)計(jì)算器程序,不僅能夠計(jì)算加減乘除,還能夠匹配小括號(hào)。實(shí)現(xiàn)代碼超簡(jiǎn)單,需要的朋友參考下吧
    2017-12-12

最新評(píng)論

宝兴县| 根河市| 旺苍县| 阳信县| 宝丰县| 都匀市| 洛南县| 清苑县| 和林格尔县| 札达县| 醴陵市| 玉树县| 大安市| 常州市| 当阳市| 榕江县| 宁河县| 丹江口市| 邯郸县| 西畴县| 育儿| 乌审旗| 潼关县| 武宣县| 宜宾县| 渭源县| 富平县| 永安市| 迭部县| 兰州市| 奉化市| 黄大仙区| 闵行区| 进贤县| 玛沁县| 凤台县| 即墨市| 浦江县| 格尔木市| 巨野县| 旬邑县|