1 <!-- 配置dbcp數據源 --> 2 <bean id="remoteDS" class="org.apache.commons.dbcp.BasicDataSource" 3 destroy-method="close"> 4 <!-- 使用的JDBC驅動的完整有效的java 類名 --> 5 <property name="driverClassName" value="${remote.jdbc.driver}" /> 6 <!-- 傳遞給JDBC驅動的用於建立連接的URL --> 7 <property name="url" value="${remote.jdbc.url}" /> 8 <!-- 數據庫用戶名 --> 9 <property name="username" value="${remote.jdbc.username}" /> 10 <!-- 用戶密碼 --> 11 <property name="password" value="${remote.jdbc.password}" /> 12 <!-- 指明是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接並嘗試取出另一個. --> 13 <property name="testOnBorrow" value="${dbcp.testOnBorrow}" /> 14 <!-- 指明是否在歸還到池中前進行檢驗 --> 15 <property name="testOnReturn" value="${dbcp.testOnReturn}" /> 16 <!-- 指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除. --> 17 <property name="testWhileIdle" value="${dbcp.testWhileIdle}" /> 18 <!-- SQL查詢,用來驗證從連接池取出的連接,在將連接返回給調用者之前.如果指定, 19 則查詢必須是一個SQL SELECT並且必須返回至少一行記錄 --> 20 <property name="validationQuery" value="${dbcp.validationQuery}" /> 21 <!-- 連接池創建的連接的默認的auto-commit狀態 --> 22 <property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" /> 23 <!-- 最大空閑連接 --> 24 <property name="maxIdle" value="${dbcp.maxIdle}" /> 25 <!-- 最大連接數量 --> 26 <property name="maxActive" value="${dbcp.maxActive}" /> 27 <!-- 連接在池中保持空閑而不被空閑連接回收器線程(如果有)回收的最小時間值,單位毫秒 --> 28 <property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" /> 29 <!-- 在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位. 如果設置為非正數,則不運行空閑連接回收器線程 --> 30 <property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" /> 31 <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${db.publicKey}"/> 32 </bean>
注:轉自https://blog.csdn.net/aixiaoyang168/article/details/49930513
對於大部分程序員來說,數據庫的信息,如用戶名,密碼等信息一般都寫到配置文件中,便於修改和維護,然而這對於運維安全來說確實一個很大的挑戰,如果黑客進入到你的系統里面去,那這些數據庫用戶名和密碼就一目了然,這個是很不安全的。Druid為此提供一種數據庫密碼加密的手段ConfigFilter,使用他加密數據庫密碼,即使別人拿到了數據庫連接密碼,破解這個密碼也得稍稍花點時間了,也對咱們的網站安全性提高了一些。
好了,廢話少說,配置一下也是很簡單的啦!
第一步:
執行druid的命令加密數據庫密碼
命令:
java -cp druid-0.2.23.jar com.alibaba.druid.filter.config.ConfigTools xxxxxx
舉個栗子:
命令: D:\>java -cp druid-1.0.15.jar com.alibaba.druid.filter.config.ConfigTools 123456 輸出: Biyu5YzU+6sxDRbmWEa3B2uUcImzDo0BuXjTlL505+/pTb+/0Oqd3ou1R6J8+9Fy3CYrM18nBDqf6wAaPgUGOg==
輸出的結果就是加密后的密碼啦!xxxxxx為你的數據庫密碼明文。
第二步:
配置數據源,使用Druid配置數據源對數據庫密碼進行解密。
1 <!-- 配置dbcp數據源 --> 2 <bean id="remoteDS" class="org.apache.commons.dbcp.BasicDataSource" 3 destroy-method="close"> 4 <!-- 使用的JDBC驅動的完整有效的java 類名 --> 5 <property name="driverClassName" value="${remote.jdbc.driver}" /> 6 <!-- 傳遞給JDBC驅動的用於建立連接的URL --> 7 <property name="url" value="${remote.jdbc.url}" /> 8 <!-- 數據庫用戶名 --> 9 <property name="username" value="${remote.jdbc.username}" /> 10 <!-- 用戶密碼 --> 11 <property name="password" value="${remote.jdbc.password}" /> 12 <!-- 指明是否在從池中取出連接前進行檢驗,如果檢驗失敗,則從池中去除連接並嘗試取出另一個. --> 13 <property name="testOnBorrow" value="${dbcp.testOnBorrow}" /> 14 <!-- 指明是否在歸還到池中前進行檢驗 --> 15 <property name="testOnReturn" value="${dbcp.testOnReturn}" /> 16 <!-- 指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除. --> 17 <property name="testWhileIdle" value="${dbcp.testWhileIdle}" /> 18 <!-- SQL查詢,用來驗證從連接池取出的連接,在將連接返回給調用者之前.如果指定, 則查詢必須是一個SQL SELECT並且必須返回至少一行記錄 --> 20 <property name="validationQuery" value="${dbcp.validationQuery}" /> 21 <!-- 連接池創建的連接的默認的auto-commit狀態 --> 22 <property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" /> 23 <!-- 最大空閑連接 --> 24 <property name="maxIdle" value="${dbcp.maxIdle}" /> 25 <!-- 最大連接數量 --> 26 <property name="maxActive" value="${dbcp.maxActive}" /> 27 <!-- 連接在池中保持空閑而不被空閑連接回收器線程(如果有)回收的最小時間值,單位毫秒 --> 28 <property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" /> 29 <!-- 在空閑連接回收器線程運行期間休眠的時間值,以毫秒為單位. 如果設置為非正數,則不運行空閑連接回收器線程 --> 30 <property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" /> 31 <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${db.publicKey}"/> 32 </bean>
說明:name=”connectionProperties” value=”config.decrypt=true”,這個就是配置druid進行數據庫密碼解密。
經過簡單的配置,這樣配置文件里面的密碼加密之后,有可以連接到數據庫啦!
當然,使用ConfigFilter解密密碼,有三種方式配置:
1) 可以在配置文件my.properties中指定config.decrypt=true
2) 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
3) 也可以在jvm啟動參數中指定-Ddruid.config.decrypt=true
ConfigFilter不僅僅可以進行數據庫加密,還可以支持配置文件從本地文件系統中讀取,從遠程http文件中讀取配置操作,大家可以試試看!
