druid连接数据库加解密

<bean id="dataSource" class="cn.zsmy.palmdoctor.utils.DecryptDruidSource" init-method="init" destroy-method="close"> <!-- 密文配置 -->
<!-- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> --> <!-- 明文配置 -->
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />

<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="60000" />
<property name="minIdle" value="1" />

<property name="validationQuery" value="SELECT 1" /> <!-- 验证连接是否成功, SQL SELECT 指令至少要返回一行 (测试/验证连接池连接的SQL语句也因数据库而异)-->
<property name="testOnBorrow" value="false" /> <!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 -->
<property name="testOnReturn" value="false" /> <!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
<property name="minEvictableIdleTimeMillis" value="300000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
<property name="testWhileIdle" value="true" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="30000" />
<property name="maxOpenPreparedStatements" value="20" /><!-- 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。 -->
<!-- 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。 -->
<property name="poolPreparedStatements" value="true" />
<!-- 指定每个PSCache连接上PSCache的大小 -->
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

<!-- 配置监控统计拦截的filters 去掉后监控界面sql无法统计
开启web监控、开启sql防火墙 -->
<property name="filters" value="config,stat,wall"></property>
<!-- 解密密码必须要配置的项 且filters也要配置config-->
<property name="connectionProperties" value="config.decrypt=true" />
<!-- <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publickey}" /> -->
</bean>

 

 

 

import com.alibaba.druid.filter.config.ConfigTools;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 用来解密配置中的密文(重点配置,在这里扩展用户名的解密) setUsername(name)
* 方法对应xml中的一个property属性,password默认加密不需要重写, 还可以加密url 重写setUrl(url)
*/
public class DecryptDruidSource extends DruidDataSource {
private static final long serialVersionUID = 1L;

@Override
public void setUsername(String username) {
try {
username = ConfigTools.decrypt(username);
} catch (Exception e) {
e.printStackTrace();
}
super.setUsername(username);
}

@Override
public void setUrl(String jdbcUrl) {
try {
jdbcUrl = ConfigTools.decrypt(jdbcUrl);
} catch (Exception e) {
e.printStackTrace();
}
super.setUrl(jdbcUrl);
}

public static void main(String[] args) throws Exception {
//加密
String password ="jdbc:mysql://127.0.0.1:3306/palm_2_test";
String encryptword = ConfigTools.encrypt(password);
System.out.println("加密后的密码:" + encryptword);

//解密
String word="kPwQtmiX9g275GOMxIgeZRK+BBeefLJZB+SCaFiMqRECpaTh+jLozvvK8KUbZq74GNiob7C8T87Y+e7j7Jx6dw==";
String decryptword = ConfigTools.decrypt(word);
System.out.println("解密后的明文:" + decryptword);
}
}

posted @ 2016-08-11 14:43  这个名字想了很久~  阅读(892)  评论(0编辑  收藏  举报