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);
項目啓動就可以使用加密的密碼了。