一、前言
之前在項目的配置文件中看到關於數據庫的配置,總覺得將數據庫用戶名和密碼赤裸裸的展現他人面前非常不好。但是技術有限,見識有限,不知道該如何處理。同時所看到的項目都是這個樣子的,所以覺得就這個樣子吧。在集成Druid數據庫連接池時,在官網文檔中偶然發現可以在SpringBoot項目的配置文件中給數據庫密碼加密,正合心意。這次就記錄一下整個實現過程。
二、Druid的ConfigFilter
ConfigFilter的作用包括:
- 從配置文件中讀取配置
- 從遠程http文件中讀取配置
- 爲數據庫密碼提供加密功能
前兩個讀取配置就直接貼原說明文檔了,重點是數據庫密碼加密實踐。
2.1 配置ConfigFilter
2.1.1 配置文件從本地文件系統中讀取
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="filters" value="config" />
<property name="connectionProperties" value="config.file=file:///home/admin/druid-pool.properties" />
</bean>
2.1.2 配置文件從遠程http服務器中讀取
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="filters" value="config" />
<property name="connectionProperties" value="config.file=http://127.0.0.1/druid-pool.properties" />
</bean>
這種配置方式,使得一個應用集羣中,多個實例可以從同一個地方讀取配置,集中配置,集中修改,部署更簡單。
2.1.3 通過jvm啓動參數來使用ConfigFilter
DruidDataSource支持jvm啓動參數配置filters,所以你可以:
java -Ddruid.filters=config ....
2.2 數據庫密碼加密
數據庫密碼直接寫在配置中,對運維安全來說,是一個很大的挑戰。Druid爲此提供一種數據庫密碼加密的手段ConfigFilter。
2.2.1 密碼加密
在命令行中執行如下命令:
java -cp druid-1.1.9.jar com.alibaba.druid.filter.config.ConfigTools 你的數據庫密碼
要執行上述命令,首先需要下載 druid-1.1.9.jar,我直接將 druid-1.1.9.jar 丟到了C:Users\liyaf 文件夾下,打開cmd,貼上命令,回車運行即可(紅框處是你的數據庫密碼,還有就是Java配置了系統環境變量)。我們可以得到公鑰,私鑰和加密後的密碼。
2.2.2 重新配置數據源
Druid數據源需要對數據庫密碼進行解密,有三種方式配置,springboot項目直接選擇第一種:
- 可以在配置文件my.properties中指定config.decrypt=true
- 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
- 也可以在jvm啓動參數中指定-Ddruid.config.decrypt=true
# JDBC配置:
# JDBC驅動程序的完全限定名。默認情況下基於URL自動檢測
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
# 數據庫的JDBC URL
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
# 數據庫登錄用戶名
spring.datasource.druid.username=root
# 數據庫登錄密碼(加密)
spring.datasource.druid.password=LWOFVDVOKzdH+PV/salzQTdpxApa7cXLNs07fvW/W7I4n1yZDndQz1FYQByzfr080tihAWRfY1bzy92EkvhxJg==
# 公鑰
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJX0QGFbKReek0aoC2fP7z/z808L/rvfvBV+c/3hU56TjGGAR+Ezsa9afZ1+BBZ52H0SQdVuir4GWNEHGLDwZZMCAwEAAQ==
# 配置 connection-properties,啓用加密,配置公鑰。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}
# 啓動ConfigFilter
spring.datasource.druid.filter.config.enabled=true
我們重啓項目正常,訪問Druid監控頁面正常。
三、總結說明
整個流程實踐下來還是很簡單的。就兩個步驟:密碼加密和配置參數。
每天記錄一點點,每天進步一點點!