SpringBoot項(xiàng)目MySQL配置文件密碼加密(jasypt)

一占遥、穿上衣服停止裸奔

我們?cè)赟pringBoot項(xiàng)目中的yml或者properties配置文件中都是明文的俯抖,如果mysql數(shù)據(jù)庫(kù)賬號(hào)、密碼也寫(xiě)成明文安全性就比較低瓦胎,明文的密碼就像在裸奔芬萍,因此有必要穿上衣服才能愉快地奔跑尤揣。我們采用Jasypt框架對(duì)MySQL數(shù)據(jù)庫(kù)賬號(hào)和密碼進(jìn)行加密。

二柬祠、使用Jasypt進(jìn)行加密

2.1 添加Jasypt依賴
compile group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '2.1.1'
2.2 將數(shù)據(jù)庫(kù)的用戶名和密碼進(jìn)行加密
public class JasyptTest {
    public static void main(String[] args) {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        //加密所需的salt(鹽),自定義
        textEncryptor.setPassword("retail_salt");
        //要加密的數(shù)據(jù)(數(shù)據(jù)庫(kù)的用戶名或密碼)
        String username = textEncryptor.encrypt("retail_u");
        String password = textEncryptor.encrypt("retail_PWD_123");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
    }
}

得到加密字符串

username:5raHicqGiQ1nEXKO+R9ykYwJUrD/+nbx
password:1NiRLG1lUkzLSg3uerUwU0bIRCDYiZnX

注:每次運(yùn)行得到的加密字符串是不一樣的

2.3 配置application-test.yml文件
spring:
  ########-spring datasource-########
  datasource:
     #賬號(hào)配置
     url: jdbc:mysql://127.0.0.1:3306/retail_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
     username: ENC(5raHicqGiQ1nEXKO+R9ykYwJUrD/+nbx)
     password: ENC(1NiRLG1lUkzLSg3uerUwU0bIRCDYiZnX)
     driver-class-name: com.mysql.cj.jdbc.Driver

########-jasypt數(shù)據(jù)庫(kù)用戶名北戏、密碼加密salt-########
jasypt:
  encryptor:
    password: retail_salt #加密時(shí)的salt值
2.4 完成配置,啟動(dòng)服務(wù)

到此已經(jīng)完成Jasypt對(duì)數(shù)據(jù)庫(kù)用戶名漫蛔、密碼的加密

三嗜愈、處理salt寫(xiě)在配置文件里泄露的問(wèn)題

我們已經(jīng)用Jasypt對(duì)數(shù)據(jù)庫(kù)用戶名、密碼的加密莽龟,但salt值又配置在application-test.yml蠕嫁,知道了salt值反過(guò)來(lái)又可以對(duì)加密字符串進(jìn)行解密, 如:

  BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
  //加密所需的salt(鹽),自定義
  textEncryptor.setPassword("retail_salt");

  //解密
  String decrypt = textEncryptor.decrypt("5raHicqGiQ1nEXKO+R9ykYwJUrD/+nbx");
  System.out.println("username decrypt:"+decrypt);
  // 可解密得到 retail_u

而且網(wǎng)上很多文章卻到此為止毯盈,宛如從裸奔“進(jìn)化”到了皇帝的新裝剃毒,自欺欺人而已。網(wǎng)上大部分提供的是處理jar的方法搂赋,具體可以參考使用Jasypt對(duì)SpringBoot配置文件加密
以下我將提供處理war包的方法赘阀。

3.1 將jasypt. encryptor. password配置從配置文件中移除

即,將這段配置從application-test.yml移除,隨后jasypt. encryptor. password的值我們將從外部配置文件中讀取

########-jasypt數(shù)據(jù)庫(kù)用戶名厂镇、密碼加密salt-########
jasypt:
  encryptor:
    password: retail_salt #加密時(shí)的salt值
3.2 新建一個(gè)名為jasypt.properties的文件纤壁,里面內(nèi)容為
jasypt.encryptor.password=retail_salt

并將該文件放在本地/Users/ac/jasypt.properties (我的Mac開(kāi)發(fā)環(huán)境)


jasypt.properties
3.3 新建一個(gè)Java類LocalSettingsEnvironmentPostProcessor
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import java.io.File;
import java.io.IOException;
import java.util.Properties;

/**
 * @author AlanChen
 * @description 讀取本地配置文件jasypt加密salt值
 * @date 2019/5/23
 */
public class LocalSettingsEnvironmentPostProcessor implements EnvironmentPostProcessor{
    /**
     * 第一個(gè)配置文件路徑為部署環(huán)境路徑,用于部署環(huán)境加載配置文件里的值
     * 第二個(gè)配置文件路徑為本地打包環(huán)境路徑捺信,解決打包時(shí)報(bào)錯(cuò)問(wèn)題
     */
    private static final String LOCATIONS [] = {"/opt/tomcat8/webapps/jasypt.properties","/Users/ac/jasypt.properties"};

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication springApplication) {
        for(String fileLocation :  LOCATIONS){
            File file = new File(fileLocation);
            if (file.exists()) {
                MutablePropertySources propertySources = configurableEnvironment.getPropertySources();
                Properties properties = loadProperties(file);
                propertySources.addFirst(new PropertiesPropertySource("Config", properties));
                return ;
            }
        }
    }

    private Properties loadProperties(File f) {
        FileSystemResource resource = new FileSystemResource(f);
        try {
            return PropertiesLoaderUtils.loadProperties(resource);
        }
        catch (IOException ex) {
            throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
        }
    }
}

這個(gè)java類的作用就是根據(jù)指定的配置文件路徑酌媒,讀取文件,添加到程序運(yùn)行的環(huán)境中迄靠。

3.4 創(chuàng)建一個(gè)spring.factories的文件

然后在你的resources文件夾下創(chuàng)建一個(gè)文件夾名為META-INF秒咨,在里面創(chuàng)建一個(gè)spring.factories的文件,文件內(nèi)容如下:

org.springframework.boot.env.EnvironmentPostProcessor=com.netelis.retail.common.config.jasypt.LocalSettingsEnvironmentPostProcessor

這個(gè)文件的作用就是設(shè)置SpringBoot服務(wù)啟動(dòng)的時(shí)候調(diào)用我們剛才寫(xiě)的那個(gè)Java類掌挚。
至此雨席,你的war包在使用tomcat啟動(dòng)的時(shí)候就應(yīng)該可以讀取制定位置的外部文件了。我的文件結(jié)構(gòu)如下吠式,僅供參考

spring.factories
3.5 打war部署測(cè)試
gradle build
image.png
3.5 本地開(kāi)發(fā)陡厘,啟動(dòng)idea

啟動(dòng)idea也正常


image.png

參考文章:
使用Jasypt對(duì)SpringBoot配置文件加密
SpringBoot 打包為war包啟動(dòng)時(shí)導(dǎo)入外部配置文件

最后給大家送波福利

阿里云折扣快速入口

阿里云折扣快速入口
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市特占,隨后出現(xiàn)的幾起案子糙置,更是在濱河造成了極大的恐慌,老刑警劉巖是目,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谤饭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)揉抵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)亡容,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冤今,你說(shuō)我怎么就攤上這事闺兢。” “怎么了戏罢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵列敲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帖汞,道長(zhǎng)戴而,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任翩蘸,我火速辦了婚禮所意,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘催首。我一直安慰自己扶踊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布郎任。 她就那樣靜靜地躺著秧耗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舶治。 梳的紋絲不亂的頭發(fā)上分井,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音霉猛,去河邊找鬼尺锚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惜浅,可吹牛的內(nèi)容都是我干的瘫辩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坛悉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼伐厌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起裸影,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挣轨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后空民,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體刃唐,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年界轩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了画饥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浊猾,死狀恐怖抖甘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葫慎,我是刑警寧澤衔彻,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站偷办,受9級(jí)特大地震影響艰额,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椒涯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一柄沮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧废岂,春花似錦祖搓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至财骨,卻和暖如春镐作,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隆箩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工滑肉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人摘仅。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓靶庙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親娃属。 傳聞我的和親對(duì)象是個(gè)殘疾皇子六荒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 引入jasypt 生成要加密的字符串 將數(shù)據(jù)庫(kù)的用戶名和密碼進(jìn)行加密 輸出信息為: 或者使用Maven下載好的ja...
    風(fēng)靜花猶落閱讀 46,232評(píng)論 7 34
  • 上一篇:《Spring Cloud入門(mén)教程(七):分布式鏈路跟蹤(Sleuth)》 本人和同事撰寫(xiě)的《Spring...
    CD826閱讀 16,028評(píng)論 6 28
  • 第一章恨意 譽(yù)王大婚,新娘逃了矾端。 葉浮生抬腳躍上了城堞掏击,望著城下馬背上喜服加身的男人,神情淡漠秩铆,“宋問(wèn)砚亭,我恨你灯变,一...
    情砸閱讀 719評(píng)論 0 2
  • 每年五一或者十一這樣的假期,全國(guó)各個(gè)大小景區(qū)寻仗,包括去景區(qū)的路上刃泌,總是人山人海,人聲鼎沸署尤,熱鬧非常耙替。 每當(dāng)這個(gè)時(shí)候,...
    xll2068閱讀 259評(píng)論 0 0
  • 微微是個(gè)單純的有點(diǎn)傻的女孩子,她也不知道喜歡一個(gè)人是什么樣的感覺(jué)箕别。不過(guò)有時(shí)候微微也會(huì)期待在她懵懂的年紀(jì)有一段童話般...
    阿Y椰子閱讀 641評(píng)論 2 2