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

Spring boot配置文件加解密詳解

 更新時(shí)間:2019年03月06日 09:54:51   作者:﹏亦°洛軒づ  
這篇文章主要給大家介紹了關(guān)于Spring boot配置文件加解密的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

功能介紹

大家都知道在Spring boot開發(fā)過程中,需要在配置文件里配置許多信息,如數(shù)據(jù)庫的連接信息等,如果不加密,傳明文,數(shù)據(jù)庫就直接暴露了,相當(dāng)于"裸奔"了,因此需要進(jìn)行加密處理才行。

在項(xiàng)目中使用jasypt-1.9.4.jar包,能夠?qū)崿F(xiàn)對(duì)明文進(jìn)行加密,對(duì)密文進(jìn)行解密。配置相關(guān)加密信息,就能夠?qū)崿F(xiàn)在項(xiàng)目運(yùn)行的時(shí)候,自動(dòng)把配置文件中已經(jīng)加密的信息解密成明文,供程序使用

下面話不多說了,來一起看看詳細(xì)的介紹吧

使用說明

1.pom引入依賴

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

2.配置文件application.yaml

******************加解密相關(guān)配置*******************
jasypt:
 encrytor:
 #用來加解密的salt值
 password: 123456
 #用來使用新的算法,默認(rèn)為org.jasypt.salt.NoOPIVGenerator,這樣的話我們就無法使用命令行中生成的密文
 ivGeneratorClassname: org.jasypt.salt.RandomIVGenerator

參數(shù)解釋:

  • password:加密時(shí)候要使用salt值
  • 對(duì)于ivGeneratorClassname,jara包中封裝類默認(rèn)為org.jasypt.salt.NoOpIVGenerator,這個(gè)時(shí)候我們?nèi)绻褂肑unit生成密文,那么只會(huì)生成24位密鑰,與命令行中用命令生成的不一樣,后面會(huì)詳細(xì)講解。

3.代碼解析

首先我們需要知道的事加解密的方法,只有知道了如何加密才能夠在配置文件中設(shè)置相關(guān)參數(shù)的密文,這里涉及到兩種方式的加密:

a.命令行加密

如果我們項(xiàng)目上線了,需要修改配置文件中的信息,這個(gè)時(shí)候我們可能要通過命令行的方式去加密(前提:保證你的salt值和你的項(xiàng)目中定義的一致)

I.找到maven倉庫本地地址,如:C:\Users\kfzx-xuming\.m2\repository 在這里面找到j(luò)asypt-1.9.4.jar所在位置

II.進(jìn)入文件夾,運(yùn)行cmd命令

加密:java -cp jasypt-1.9.4.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLIinput=pass1234password=12345algorithm=PBEWithMD5AndDES

參數(shù)說明:

  • input:加上需要加密的明文
  • password:加上salt值(需要和項(xiàng)目中的application.yaml的password 一致)
  • algorithm:加上加密算法(默認(rèn)使用的就是PBEWithMD5AndDES)

這個(gè)時(shí)候我們可以看到下面的加密結(jié)果:

下面的output中就是我們對(duì)明文pass1234使用salt值為12345加密的結(jié)果

解密:java -cp jasypt-1.9.4.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input=pdFVCKrYnVOkTpeJ+081g70kzVWV2aLrTOK2EjrJkkSNMbu4C4IX+Q== password=12345 algorithm=PBEWithMD5AndDES

這個(gè)時(shí)候我們可以看到解密結(jié)果:

b.在eclipse中用Junit運(yùn)行代碼對(duì)明文加密解密

前提已經(jīng)在配置文件中配置了jasypt相關(guān)信息

jasypt提供了封裝類StringEncryptor,可以通過代碼來加解密,我們可以使用這個(gè)類運(yùn)行相關(guān)方法

Junit相關(guān)代碼:

import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import static sun.plugin.javascript.navig.JSType.Embed;
 
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class JasyptTest {
 
 @Autowired
 StringEncryptor encryptor;
 //加密
 @Test
 public void getPass(){
 String name = encryptor.encrypt("hello");
 System.out.println("加密結(jié)果:"+name);//解密
 @Test
 public void passDecrypt(){
 String username = encryptor.decrypt("7uBC9fVLpL05ipEPzgsDT6Qcjuq9HvDYc0VUIgP4hY=");
 System.out.println("解密結(jié)果:"+username);
 }
}

運(yùn)行結(jié)果如下:

這個(gè)時(shí)候我們就得到了想要的密文,直接粘貼到配置文件中即可

使用方法如下:

I.在配置文件application.yaml相關(guān)位置把明文替換成密文,用ENC()包裹:

************** 加解密相關(guān)測(cè)試配置信息***************
test:
 code:
 username: ENC(pdFVCKrYnVOkTpeJ+081g70kzVWV2aLrTOK2EjrJkkSNMbu4C4IX+Q==)

II.在相應(yīng)的位置直接讀取使用即可,下面我們寫一個(gè)controller類測(cè)試一下運(yùn)行解密的效果:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@Controller
public class JasyptController {
 
 @Value("${cmd.username}")
 private String cmdUsername;
 
 @RequestMapping("/hello")
 public String testJasypt() {
 return cmdUserName;
 }
}

這個(gè)時(shí)候我們啟動(dòng)項(xiàng)目就能夠看到我們?cè)倥渲弥性O(shè)置的密文對(duì)應(yīng)的明文

至此配置文件的加解密的使用方法就介紹完了

4.補(bǔ)充說明

對(duì)于上述配置文件中的ivGeneratorClassname再進(jìn)行一個(gè)詳細(xì)的介紹

對(duì)于上述的Junit中使用的StringEncryptor封裝類,他是可以通過讀取配置文件中的信息進(jìn)行加解密相關(guān)參數(shù)進(jìn)行初始化,通過閱讀遠(yuǎn)嗎,我們可以發(fā)現(xiàn),初始化config的時(shí)候會(huì)跳轉(zhuǎn)到如下的地方進(jìn)行設(shè)置:

如果在配置參數(shù)中沒有設(shè)置ivGeneratorClassname,那么默認(rèn)就是org.jasypt.salt.NoOpIVGenerator,那么在運(yùn)行加解密的時(shí)候就會(huì)生成一個(gè)24位的密文,如圖:

但是我們可以看到上面用命令行生成的卻比這個(gè)廠,這個(gè)時(shí)候如果我們把命令行中生成的密文粘貼到配置文件中則springboot就會(huì)啟動(dòng)不了,Junit也會(huì)報(bào)錯(cuò)解析,把這個(gè)密文用命令解析發(fā)現(xiàn)也會(huì)報(bào)錯(cuò)

這個(gè)說明命令行中的加解密不是通過StringEncryptor類來操作的,那是走那邊的呢?

通過查閱資料我們發(fā)現(xiàn)了下面的代碼:

package cn.linjk.ehome;
 
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentPBEConfig;
import org.junit.Test;
 
public class JasyptTest {
 @Test
 public void testEncrypt() throws Exception {
 StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
 EnvironmentPBEConfig config = new EnvironmentPBEConfig();
 
 config.setAlgorithm("PBEWithMD5AndDES");  // 加密的算法,這個(gè)算法是默認(rèn)的
 config.setPassword("12345");   // 加密的密鑰
 standardPBEStringEncryptor.setConfig(config);
 String plainText = "hello";
 String encryptedText = standardPBEStringEncryptor.encrypt(plainText);
 System.out.println(encryptedText);
 }
}

這個(gè)時(shí)候我們運(yùn)行一下,得到下面的結(jié)果:

把這個(gè)密文用命令進(jìn)行解密發(fā)現(xiàn)也是成功的,查看源碼(下圖):可以看出,命令行如果沒有設(shè)置ivGeneratorClassname那么默認(rèn)就會(huì)new RandomIVGenerator,就是這一步導(dǎo)致了生成了不一樣的密文:

綜上所述,結(jié)合場(chǎng)景,如果我們是項(xiàng)目需要上線了,不方便運(yùn)行Junit去生成密文,填入配置文件,需要用命令行對(duì)明文加密,那一定要在配置文件中設(shè)置ivGeneratorClassname值!?。?/p>

公司電腦沒有辦法用外網(wǎng)上,圖片用手機(jī)拍的,如果感覺模糊,請(qǐng)見諒,大家相互學(xué)習(xí)~~~~~~

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Java查看本機(jī)端口是否被占用源碼

    Java查看本機(jī)端口是否被占用源碼

    這篇文章主要介紹了Java查看本機(jī)端口是否被占用的主要原理,并結(jié)合具體實(shí)例給出了操作方法,需要的朋友可以參考下
    2017-09-09
  • spring打包到j(luò)ar包的問題解決

    spring打包到j(luò)ar包的問題解決

    這篇文章主要給大家介紹了關(guān)于spring打包到j(luò)ar包遇到的問題的解決方法,文中通過實(shí)例代碼結(jié)束的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用spring打包具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 深入解析Java類加載的案例與實(shí)戰(zhàn)教程

    深入解析Java類加載的案例與實(shí)戰(zhàn)教程

    本篇文章主要介紹Tomcat類加載器架構(gòu),以及基于類加載和字節(jié)碼相關(guān)知識(shí),去分析動(dòng)態(tài)代理的原理,對(duì)Java類加載相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-05-05
  • Jmeter跨線程組共享cookie過程圖解

    Jmeter跨線程組共享cookie過程圖解

    這篇文章主要介紹了Jmeter跨線程組共享cookie過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 淺聊java8中數(shù)值流的使用

    淺聊java8中數(shù)值流的使用

    java8為我提供的簡單快捷的數(shù)值流計(jì)算API,本文就基于幾個(gè)常見的場(chǎng)景介紹一下數(shù)值流API的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2023-10-10
  • Java實(shí)現(xiàn)實(shí)時(shí)監(jiān)控目錄下文件變化的方法

    Java實(shí)現(xiàn)實(shí)時(shí)監(jiān)控目錄下文件變化的方法

    今天小編就為大家分享一篇關(guān)于Java實(shí)現(xiàn)實(shí)時(shí)監(jiān)控目錄下文件變化的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java計(jì)算程序代碼執(zhí)行時(shí)間的方法小結(jié)

    Java計(jì)算程序代碼執(zhí)行時(shí)間的方法小結(jié)

    這篇文章主要介紹了Java計(jì)算程序代碼執(zhí)行時(shí)間的方法,結(jié)合實(shí)例形式總結(jié)分析了java采用毫秒數(shù)及納秒數(shù)計(jì)算程序運(yùn)行時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法詳解

    MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法詳解

    這篇文章主要介紹了MyBatis在Mapper中傳遞多個(gè)參數(shù)的四種方法,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,,需要的朋友可以參考下
    2023-09-09
  • SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法

    SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法

    這篇文章主要為大家介紹了SpringBoot統(tǒng)一接口返回及全局異常處理高級(jí)用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • idea沒有services窗口、沒有springboot啟動(dòng)項(xiàng)問題

    idea沒有services窗口、沒有springboot啟動(dòng)項(xiàng)問題

    這篇文章主要介紹了idea沒有services窗口、沒有springboot啟動(dòng)項(xiàng)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評(píng)論