参考 :Druid官网https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilterjava
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------mysql
ConfigFilter的做用包括:
从配置文件中读取配置
从远程http文件中读取配置
为数据库密码提供加密功能
1 配置ConfigFilter
1.1 配置文件从本地文件系统中读取
init-method="init" destroy-method="close">
1.2 配置文件从远程http服务器中读取
init-method="init" destroy-method="close">
这种配置方式,使得一个应用集群中,多个实例能够从同一个地方读取配置,集中配置,集中修改,部署更简单。
1.3 经过jvm启动参数来使用ConfigFilter
DruidDataSource支持jvm启动参数配置filters,因此你能够:
java -Ddruid.filters=config ....
2 数据库密码加密
数据库密码直接写在配置中,对运维安全来讲,是一个很大的挑战。Druid为此提供一种数据库密码加密的手段ConfigFilter。
2.1 执行命令加密数据库密码
在命令行中执行以下命令:
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools you_password
输出
privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==
输入你的数据库密码,输出的是加密后的结果。
2.2 配置数据源,提示Druid数据源须要对数据库密码进行解密。
init-method="init" destroy-method="close">
2.3 配置参数,让ConfigFilter解密密码
有三种方式配置:
1) 能够在配置文件my.properties中指定config.decrypt=true
2) 也能够在DruidDataSource的ConnectionProperties中指定config.decrypt=true
3) 也能够在jvm启动参数中指定-Ddruid.config.decrypt=truegit
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------github
jar包版本:druid-1.0.13.jarspring
1. 加密,用如下命令将用户名和密码加密sql
cmd命令行执行java -cp D:/druid-1.0.13.jar com.alibaba.druid.filter.config.ConfigTools用户名/密码数据库
获得密文:安全
f0PSl0Lzxh6CxzuFIdEg+wVx045fSE2VtUP45G9HH2cjVQnmGGgcK5CLzNUJoR6tGwRO44h74OxrBWuDzWC8jg==服务器
2.用户名解密:运维
ackage com.heli.core.user.common;
import com.alibaba.druid.filter.config.ConfigTools;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 用来解密配置中的密文(重点配置,在这里扩展用户名的解密)
* setUsername(name) 方法对应xml中的一个property属性,password默认加密不须要重写,
* 还能够加密url 重写setUrl(url)
*/
@SuppressWarnings("all")
public class DecryptDruidSource extends DruidDataSource{
@Override
public void setUsername(String username) {
try {
username = ConfigTools.decrypt(username);
} catch (Exception e) {
e.printStackTrace();
}
super.setUsername(username);
}
}
3.spring-database.xml中数据库链接的配置
4.数据库配置文件:
3.user.properties中
#mysql
username=f0PSl0Lzxh6CxzuFIdEg+wVx045fSE2VtUP45G9HH2cjVQnmGGgcK5CLzNUJoR6tGwRO44h74OxrBWuDzWC8jg==
password=f0PSl0Lzxh6CxzuFIdEg+wVx045fSE2VtUP45G9HH2cjVQnmGGgcK5CLzNUJoR6tGwRO44h74OxrBWuDzWC8jg==
url=jdbc:mysql://192.168.1.194/user?characterEncoding=utf-8
driver=com.mysql.jdbc.Driver
initialSize=5
minIdle=5
maxActive=20
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=30000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=true
testOnReturn=true
filters=stat,log4j
removeAbandoned=true
removeAbandonedTimeout=1200
logAbandoned=true