網(wǎng)站首頁 編程語言 正文
一、前言
通常項(xiàng)目配置文件中的賬號(hào)信息如下,都是直接暴露出來的,如果源碼不小心泄露將會(huì)引起一系列安全問題
二、解決
-
通過
配置中心
動(dòng)態(tài)加載配置文件 -
通過
jasypt
加密組件進(jìn)行加密
/解密
三、實(shí)現(xiàn)
1、pom.xml
中引入依賴
<!-- jasypt加密組件: https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
2、application.yml
中配置加密密鑰
# 配置加密密鑰
jasypt:
encryptor:
password: zhong # 這里密鑰修改 隨意
3、jasypt加密/解密測(cè)試類
public class JasyptTest {
@Test
public void test() {
// 對(duì)應(yīng)配置文件中配置的加密密鑰
System.setProperty("jasypt.encryptor.password", "zhong");
StringEncryptor stringEncryptor = new DefaultLazyEncryptor(new StandardEnvironment());
System.out.println("加密: " + stringEncryptor.encrypt("root"));
System.out.println("解密: " + stringEncryptor.decrypt("上面加密的字符串"));
}
}
4、修改yml配置文件賬號(hào)信息為加密方式
spring:
application:
name: scheduled
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: defaultDataSource
password: ENC(uBxFfL0wQd9sL9CLV1zZbg==)
url: jdbc:mysql://127.0.0.1:3306/aj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ENC(BkmP68GGfNiTdQfZRXwoqA==)
jasypt:
encryptor:
password: zhong
四、擴(kuò)展知識(shí)
自定義加密標(biāo)識(shí)
jasypt默認(rèn)使用
ENC()
來標(biāo)識(shí)加密,加載配置的時(shí)候檢測(cè)到ENC()
即會(huì)自動(dòng)解密下面我們來嘗試自定義一個(gè)加密標(biāo)識(shí),
JAVA_ABE()
application.yml
中新增如下配置:
jasypt:
encryptor:
property:
prefix:JAVA_ABE
( # 加密前綴
suffix: ) # 加密后綴
password: zhong # 加密密鑰
修改配置如下:
spring:
application:
name: scheduled
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
name: defaultDataSource
password: JAVA_ABE(uBxFfL0wQd9sL9CLV1zZbg==)
url: jdbc:mysql://127.0.0.1:3306/aj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: JAVA_ABE(BkmP68GGfNiTdQfZRXwoqA==)
jasypt:
encryptor:
password: zhong
讓加密更安全
雖然經(jīng)過上文的加密,涉及信息安全的配置項(xiàng)肯定會(huì)變得更安全,這個(gè)是毫無疑問的!
但是假如配置文件里的自定義加密密鑰jasypt.encryptor.password=zhong
泄露了,那我們的加密字段也還是有可能被別人解密(畢竟還是寫在了配置文件中),為此,有幾項(xiàng)工作可以讓加密變得更加安全。
方式一:直接作為程序啟動(dòng)時(shí)的命令行參數(shù)來帶入
java -jar scheduled.jar --jasypt.encryptor.password=
zhong
方式二:直接作為程序啟動(dòng)時(shí)的應(yīng)用環(huán)境變量來帶入
java -Djasypt.encryptor.password=
zhong
-jar scheduled.jar
方式三:甚至可以作為系統(tǒng)環(huán)境變量的方式來帶入
jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:}
這樣就安全多了
原文鏈接:https://blog.csdn.net/m0_61157117/article/details/125715621
相關(guān)推薦
- 2022-07-24 .Net行為型設(shè)計(jì)模式之命令模式(Command)_基礎(chǔ)應(yīng)用
- 2022-02-21 C#多線程學(xué)習(xí)之Thread、ThreadPool、Task、Parallel四者區(qū)別_C#教程
- 2022-12-26 React?Context與setState詳解使用方法_React
- 2023-02-03 c語言統(tǒng)計(jì)素?cái)?shù)之和的實(shí)例_C 語言
- 2022-10-23 Android實(shí)現(xiàn)底部滾輪式選擇彈跳框_Android
- 2022-12-06 .net程序開發(fā)IOC控制反轉(zhuǎn)和DI依賴注入詳解_ASP.NET
- 2023-12-26 layui彈窗傳值
- 2022-03-23 解決plsql因事務(wù)未提交造成的鎖表問題_oracle
- 欄目分類
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支