天天看點

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

Druid的功能

1、替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴充性好的資料庫連接配接池。

2、可以監控資料庫通路性能,Druid内置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對于線上分析資料庫通路性能有幫助。

3、資料庫密碼加密。直接把資料庫密碼寫在配置檔案中,這是不好的行為,容易導緻安全問題。DruidDruiver和DruidDataSource都支援PasswordCallback。

4、SQL執行日志,Druid提供了不同的LogFilter,能夠支援Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的資料庫通路情況。

5、擴充JDBC,如果你要對JDBC層有程式設計的需求,可以通過Druid提供的Filter機制,很友善編寫JDBC層的擴充插件。

其中第三條說出了本部落格的一個目的,詳細過程如下:

1、首先配置Druid的資料庫連接配接池

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!
你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

其中要注意的是:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

2、建立DruidPasswordCallback的子類如下:

這裡的DBPasswordCallback 是繼承com.alibaba.druid.util.DruidPasswordCallback 的,重寫的是DruidPasswordCallback 的setProperties方法,在setProperties方法中使用了setPassword(password.toCharArray());這個方法,setPassword是DruidPasswordCallback 的父類中的一個方法。

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

一個代碼追蹤過程:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

1、使用

com.alibaba.druid.filter.config.ConfigTools

提供的加密和解密方法

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

從源代碼中可以看出,ConfigTools加密和解密使用了預設的公鑰和私鑰,這裡我們建立自己的公鑰和私鑰。

2、使用RSA公鑰和私鑰,生成一對公鑰和私鑰的工具類:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!
你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

結果如下:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

上邊是公鑰下邊是私鑰。

3、使用私鑰對明文密碼進行加密

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

結果如下:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

那我們資料庫的密碼就應該設定為這個結果:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

4、解析密碼的時候需要的Callback類

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

其中PasswordCallback是javax.security.auth.callback包下面的,底層安全服務執行個體化一個 PasswordCallback 并将其傳遞給 CallbackHandler 的 handle 方法,以擷取密碼資訊。

當然,除了使用上述的方式,自己也可以對應一套加解密方法,隻需要在DBPasswordCallback的String password =ConfigTools.decrypt(PUBLIC_KEY_STRING, pwd);替換即可。

3、在jdbc.properties存放自己加密之後的資訊

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

注意:2、3過程中密碼的設定要确定,加密、解密的最初始密碼是要對應的。

4、設定自定義的DruidPasswordCallback

在自己的spring配置檔案中加入下邊的一句bean配置:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

另外還可以直接繼承自Spring提供的PropertyPlaceholderConfigurer,摘錄别人一段代碼大家參考一下:

你的資料庫密碼還在裸奔嗎?試一試Druid資料庫密碼加解密吧!

粘貼複制代碼請點選下方“閱讀原文”檢視。