druid 支持PasswordCallback
首先 项目引入druid相关jar
其次 修改配置文件
配置文件配置druid的配置参数
- spring.datasource.druid.connect-properties=config.decrypt=true
- spring.datasource.druid.password-callback=com.XXX.util.DBPasswordCallback
- spring.datasource.filters=stat,wall,log4j
- spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;password=fVDKvFmZt
然后
import com.alibaba.druid.util.DruidPasswordCallback;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import java.util.Properties;
@SuppressWarnings("serial")
public class DBPasswordCallback extends DruidPasswordCallback {
private static Logger log = Logger.getLogger(DBPasswordCallback.class);
//上述生成的公钥
public static final String PRIVATE_KEY_STRING = "MIICdgIBADANBgkqhkiG9=";
@Override
public void setProperties(Properties properties) {
super.setProperties(properties);
String pwd = (String)properties.get("password");
log.debug("DBPasswordCallback = " + pwd);
if (StringUtils.isNotBlank(pwd)) {
try {
//这里的password是将jdbc.properties配置得到的密码进行解密之后的值
//所以这里的代码是将密码进行解密
//TODO 将pwd进行解密;
String password = RSAKeysUtil.decrypt( pwd , PRIVATE_KEY_STRING );
log.debug(password);
setPassword(password.toCharArray());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
RSAKeysUtil是用RSA写的加密解密工具,密码的加密解密可以自己选择
最后是druid的配置类加上 druidDataSource.setPasswordCallbackClassName(passwordCallbackClassName);
项目启动就可以使用加密的密码了。