網站首頁 編程語言 正文
一、前言
通常項目配置文件中的賬號信息如下,都是直接暴露出來的,如果源碼不小心泄露將會引起一系列安全問題
二、解決
-
通過
配置中心
動態加載配置文件 -
通過
jasypt
加密組件進行加密
/解密
三、實現
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加密/解密測試類
public class JasyptTest {
@Test
public void test() {
// 對應配置文件中配置的加密密鑰
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配置文件賬號信息為加密方式
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
四、擴展知識
自定義加密標識
jasypt默認使用
ENC()
來標識加密,加載配置的時候檢測到ENC()
即會自動解密下面我們來嘗試自定義一個加密標識,
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
讓加密更安全
雖然經過上文的加密,涉及信息安全的配置項肯定會變得更安全,這個是毫無疑問的!
但是假如配置文件里的自定義加密密鑰jasypt.encryptor.password=zhong
泄露了,那我們的加密字段也還是有可能被別人解密(畢竟還是寫在了配置文件中),為此,有幾項工作可以讓加密變得更加安全。
方式一:直接作為程序啟動時的命令行參數來帶入
java -jar scheduled.jar --jasypt.encryptor.password=
zhong
方式二:直接作為程序啟動時的應用環境變量來帶入
java -Djasypt.encryptor.password=
zhong
-jar scheduled.jar
方式三:甚至可以作為系統環境變量的方式來帶入
jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:}
這樣就安全多了
原文鏈接:https://blog.csdn.net/m0_61157117/article/details/125715621
相關推薦
- 2022-07-01 Keras實現Vision?Transformer?VIT模型示例詳解_python
- 2022-12-06 Python基礎面向對象之繼承與派生詳解_python
- 2022-09-22 nodeSelector:Pod 定向調度
- 2022-05-04 C語言中getchar()的原理以及易錯點解析_C 語言
- 2023-04-08 React中useCallback?useMemo到底該怎么用_React
- 2021-12-03 C++中signed?main和int?main的區別_C 語言
- 2022-03-20 C語言基礎雙指針移除元素解法_C 語言
- 2021-12-07 C語言實現頁面置換算法(FIFO、LRU)_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支