关于druid数据库密码加密流程及问题
Posted 程序媛的爬行之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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之后,终于能正常运行了。
以上是关于关于druid数据库密码加密流程及问题的主要内容,如果未能解决你的问题,请参考以下文章