Druid数据库密码加密

1 Druid官方提供的数据库密码加密

1.1执行命令加密数据库密码

在命令行中执行如下命令:

java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password

1.2 配置数据源,提示Druid数据源需要对数据库密码进行解密。

[plain] view plain copy
 
  1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  
  2.      init-method="init" destroy-method="close">  
  3.      <property name="url" value="jdbc:derby:memory:spring-test;create=true" />  
  4.      <property name="username" value="sa" />  
  5.      <property name="password" value="${password}" />  
  6.      <property name="filters" value="config" />  
  7.      <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${publickey}" />  
  8. </bean>  
 

1.3 配置参数,让ConfigFilter解密密码

有三种方式配置:
1) 可以在配置文件my.properties中指定config.decrypt=true 
2) 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true 
3) 也可以在jvm启动参数中指定-Ddruid.config.decrypt=true 

2. 自定义数据库密码加密方法

1. 实现DBPasswordCallback

[java] view plain copy
 
  1. package com.netposa.security;  
  2.   
  3. import com.alibaba.druid.util.DruidPasswordCallback;  
  4. import org.apache.commons.lang3.StringUtils;  
  5.   
  6. import java.util.Properties;  
  7.   
  8. /** 
  9.  * Created by Administrator on 2016/11/7. 
  10.  */  
  11. public class DBPasswordCallback extends DruidPasswordCallback {  
  12.     @Override  
  13.     public void setProperties(Properties properties) {  
  14.         super.setProperties(properties);  
  15.         String pwd = properties.getProperty("password");  
  16.         if (StringUtils.isNoneBlank(pwd)) {  
  17.             try {  
  18.                 //这里的password是将jdbc.properties配置得到的密码进行解密之后的值  
  19.                 //所以这里的代码是将密码进行解密  
  20.                 //TODO 将pwd进行解密;  
  21.                 String password = decrypt(pwd);  
  22.                 setPassword(password.toCharArray());  
  23.             } catch (Exception e) {  
  24.                 setPassword(pwd.toCharArray());  
  25.             }  
  26.         }  
  27.     }  
  28.   
  29.     private String decrypt(String src)  
  30.     {  
  31.        //解密  
  32.     }  
  33. }  

2、配置Druid的数据库连接池

  1. <bean id="dbPasswordCallback" class="com.netposa.security.DBPasswordCallback" lazy-init="true"/>  
  1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">  
  2.         <property name="driverClassName" value="${datasource.jdbc.driver}"/>  
  3.         <property name="url" value="${datasource.jdbc.url}"/>  
  4.         <property name="username" value="${datasource.jdbc.username}"/>  
  5.         <property name="password" value="${datasource.jdbc.password}"/>  
  6.   
  7.         <property name="passwordCallback" ref="dbPasswordCallback"/>  
  8.         <property name="connectionProperties" value="password=${datasource.jdbc.password}" />  
 

 
 
 
  1. <property name="passwordCallback" ref="dbPasswordCallback"/>  

 
  1. <property name="connectionProperties" value="password=${datasource.jdbc.password}" />  
 
 
  1. ${datasource.jdbc.password}为加密后的密码  
 
posted @ 2018-06-25 15:03  wumengjuan  阅读(1730)  评论(0编辑  收藏  举报