關於druid數據庫密碼加密流程及問題


最近項目中需要在配置中將數據庫密碼加密,就使用了阿里的druid來實現,將流程和問題和大家分享一下。

項目使用的是Spring加jetty,原先數據庫連接使用的是Apache的DBCP:commons-dbcp2-2.1.1.jar+ojdbc6.jar

配置:<New class="com.alibaba.druid.pool.DruidDataSource">
            <Set name="driverClassName">oracle.jdbc.driver.OracleDriver</Set>
            <Set name="url">jdbc:derby:memory:spring-test;create=true</Set>
            <Set name="username">test123</Set>            
            <Set name="password">test123</Set>      
            <Set name="validationQuery">select 1 from dual</Set>           
         </New>

改成druid:druid-1.0.13.jar+ojdbc6.jar

配置:(只需將class修改為com.alibaba.druid.pool.DruidDataSource)

  <New class="com.alibaba.druid.pool.DruidDataSource">
            <Set name="driverClassName">oracle.jdbc.driver.OracleDriver</Set>(不配也可以,會根據url自動識別)
            <Set name="url">jdbc:derby:memory:spring-test;create=true</Set>
            <Set name="username">test123</Set>            
            <Set name="password">OkBVtGCZIhSXT7Fcg==</Set>
            <Set name="filters">config</Set>
            <Set name="connectionProperties">config.decrypt=true</Set>    
            <Set name="validationQuery">select 1 from dual</Set>
            <Call name="init"/>
         </New>

以上配置的解釋:其他的參數配置不詳述,重點解釋數據庫密碼加密

    1.password:使用命令java -cp druid-1.0.13.jar com.alibaba.druid.filter.config.ConfigTools you_password來生成密碼

    每次執行生成的密文是不一樣的

    如果使用的是druid-1.0.31.jar會生成privateKey、passwordKey和publicKey,配置需改成

     <Set name="password">OkBVtGCZIhSXT7Fcg==</Set><!-- 生成的passwordKey -->
            <Set name="filters">config</Set>
            <Set name="connectionProperties">config.decrypt=true;config.decrypt.key=DSDFGTGETGsd</Set>  <!-- 生成的publicKey-->(不改也可以,有默認)

    2.filters:配置監控

    3.connectionProperties:config.decrypt=true提示Druid數據源需要對數據庫密碼進行解密

    4. <Call name="init"/>:必須配置這個方法。

    在https://github.com/alibaba/druid/tree/master下載源碼項目導入工程中,debug源碼之后發現參數都能接收進去,但是不去執行解密的操作,一直報錯用戶名\口令無效,登錄被拒絕,加上這個方法配置之后能走通

其他相關的問題可參考https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

        https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

配置好之后,報錯package oracle.jdbc.driver is sealed,數據庫的包被加密,一般情況是jar包沖突。

排查了好久終於在一個war包中找到ojdbc7.jar,去除7之后,終於能正常運行了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM