(一)背景
最近一个项目的数据源用的dbcp,dbcp数据源的连接密码是加密过得,主要的加密操作是之前同事做的,查了很久,他是修改了dbcp的源码,修改了BasicDataSource类里面的createConnectionFactory()方法,主要是在里面对加密的密码进行了解密,再创建连接。
String pwd = reset(password);
if (pwd != null)
connectionProperties.put("password", pwd);
else
log("DBCP DataSource configured without a 'password'");
然后,我们只要用他重新打包发布的dbcp jar包就能用加过密的密码创建数据库连接。
现在的情况是,我想换数据源,但是新的数据源不想修改源码,同时还是使用加密的密码做数据库连接,这是为了防止数据库泄露(虽然说这种方式,是防君子,不防小人)
(二)分析
通过上面的了解,可以修改dbcp的源码对加密的密码进行解密,然后创建连接,那么是不是也可以在不修改源码的情况下,拦截源码中创建连接时的setPassword()方法,解密后再设置。那么,应该拦截哪个方法呢?或者说继承
(三)测试
1.配置文件修改
<bean id="dataSourceProperties" class="com.dooioo.datasource.PropertiesEncryptFactoryBean">
<property name="properties">
<props>
<prop key="user" >${${env}.boms.jdbc.username}</prop>
<prop key=&#