網(wǎng)站首頁 編程語言 正文
?僅需兩步, 即可完成日常開發(fā)中數(shù)據(jù)庫連接池的密文配置.
開發(fā)的同學(xué)都知道,數(shù)據(jù)源配置是必不可少的, 目前大多數(shù)使用的連接池也是明文密碼配置, 這樣的配置方式是存在一定的泄露風(fēng)險的, 比如在多項目并行的情況容易造成開發(fā)人員無意中的泄露,因此推薦使用密文配置賬號密碼. 項目環(huán)境: spring-boot? 2.3.12.RELEASE druid-spring-boot-starter 1.1.22
第一步: 使用druid自帶的工具類進行加密, 獲取加密密文和密鑰
/**
* 請把publicKey和password復(fù)制到配置文件中。
* @throws Exception
*/
@Test
public void druidEncrypt() throws Exception {
//java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password
String password = "123456";
String[] arr = ConfigTools.genKeyPair(512);
System.out.println("privateKey:" + arr[0]);
System.out.println("publicKey:" + arr[1]);
System.out.println("password:" + ConfigTools.encrypt(arr[0], password));
}
第二步:修改配置文件,? 附密文配置樣例(目前已應(yīng)用)
spring:
datasource:
url: yourUrl
#連接數(shù)據(jù)庫的用戶名
username: yourname
#連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。
publicKey: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANRf3gpbZG0ja2Qi89aSlz1pR8YXvi2sSeg+SPXKixWjy8M6VVTevAnPuGBhIaSB0yRyYmWEmlnKBGziIwv9eYECAwEAAQ==
password: RP9+tWLFVtcuV8tjnftPW8tw2Dh+AWlC/W+rvuMru4SdeTkUp1u1VKfSNTyQ1oXeppHR8YlzI+AZoOtwFbFcXw==
#這一項可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassName
#driverClassName
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 連接池的配置信息
# 初始化大小,最小,最大
initialSize: 5
maxActive: 15
minIdle: 5
# 配置獲取連接等待超時的時間
maxWait: 60000
# 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。
poolPreparedStatements: false
#要啟用PSCache,必須配置大于0,當(dāng)大于0時,poolPreparedStatements自動觸發(fā)修改為true。在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個數(shù)值配置大一些,比如說100
maxPoolPreparedStatementPerConnectionSize: -1
#用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。
validationQuery: select 'x'
#單位:秒,檢測連接是否有效的超時時間。底層調(diào)用jdbc Statement對象的void setQueryTimeout(int seconds)方法
validationQueryTimeout: 60
#申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
testOnBorrow: true
# 歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。
testOnReturn: true
#建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
testWhileIdle: true
#連接保持空閑而不被驅(qū)逐的最小時間
#minEvictableIdleTimeMillis:
#物理連接初始化的時候執(zhí)行的sql
#connectionInitSqls:
#當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時,拋棄連接
#exceptionSorter:
#屬性類型是字符串,通過別名的方式配置擴展插件,常用的有stat,wall,slf4j
filters: stat,slf4j,wall
filter:
config:
enabled: true
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
connectionProperties: config.decrypt=true;config.decrypt.key=${spring.datasource.publicKey};druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
?
小結(jié): 1 加密密碼獲取公鑰, 2 修改配置文件.
關(guān)鍵配置屬性:
publicKey, password,? filter:config:enabled:true,?config.decrypt=true;config.decrypt.key=${spring.datasource.publicKey}
拓展: druid是使用RSA進行非堆成加解密的, 需要進一步了解的同學(xué)可以看看其在何時以及如何實現(xiàn).
?
原文鏈接:https://blog.csdn.net/YSOLA4/article/details/124505170
相關(guān)推薦
- 2022-06-22 深入淺析C/C++?的條件編譯_C 語言
- 2022-08-30 MongoDB數(shù)據(jù)庫基礎(chǔ)知識整理_MongoDB
- 2022-09-20 linux?shell字符串截取的詳細總結(jié)(實用!)_linux shell
- 2022-05-06 Python學(xué)習(xí)之函數(shù)的定義與使用詳解_python
- 2022-03-29 C#算法之無重復(fù)字符的最長子串_C#教程
- 2023-02-09 go?slice?擴容實現(xiàn)原理源碼解析_Golang
- 2022-11-23 GoLang?strings.Builder底層實現(xiàn)方法詳解_Golang
- 2024-03-23 css動態(tài)樣式的幾種常見寫法
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支