Spring 加密 Druid 连接池(二)—— 加密 url,driverClassName,用户名,密码

why?

连接信息暴露在配置文件中有风险 

how?

一、准备加密后连接信息

使用Druid自带工具类ConfigTools加密连接信息

import com.alibaba.druid.filter.config.ConfigTools;
public class DecryptDruid {
    
    public DecryptDruid() {
        super();
        // TODO Auto-generated constructor stub
    }
    public static void main(String[] args){
        DecryptDruid dp = new DecryptDruid();
        String[] myUserPass ={url,driverclassname,username,password};
                for(int i = 0;i < myUserPass.length();i++){
        dp.testDecrypt(dp.testEncrypt(myUserPass));
    }
    }
    /**
     * 对文字进行解密
     * @throws Exception
     */
    public String testDecrypt(String encry){
        //解密
        String word=encry;
        String decryptword="";
        try {
            decryptword = ConfigTools.decrypt(word);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        System.out.println(decryptword);
        return decryptword;
    }
    /**
     * 文字进行加密
     * @throws Exception 
     */
    public String testEncrypt(String userpass)
    {
        //加密
        String encryptword = "";
        try {
            encryptword = ConfigTools.encrypt(userpass);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        System.out.println(encryptword);
        return encryptword;
    }
}
    
DecryptDruid

二、准备解密方法类

继承DruidDataSource,覆盖父类连接信息set方法

import com.alibaba.druid.filter.config.ConfigTools;
import com.alibaba.druid.pool.DruidDataSource;

@SuppressWarnings("serial")
public class EncryptDruidDataSource extends DruidDataSource{
    
    @Override
    public void setUrl(String url){
        try {
            url = ConfigTools.decrypt(url);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        super.setUrl(url);
    }
    
    @Override
    public void setDriverClassName(String driverClassName){
        try {
            driverClassName = ConfigTools.decrypt(driverClassName);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        super.setDriverClassName(driverClassName);
    }
    
    @Override
    public void setUsername(String username){
        try {
            username = ConfigTools.decrypt(username);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        super.setUsername(username);
    }
    
    @Override
    public void setPassword(String password){
        try {
            password = ConfigTools.decrypt(password);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        super.setPassword(password);
    }
}
View Code

三、更改配置文件

将加密后连接信息加入配置文件

filters=config

四、更改dataSource配置

<bean id="dataSource" class="com.**.**.EncryptDruidDataSource" destroy-method="close">

添加:

<property name="connectionProperties" value="config.decrypt=true;" />

OK!

不过,配置mybatis会有databaseid not found问题,如有解决者,望赐教!

posted @ 2017-05-16 09:30  川雨淅  阅读(1930)  评论(0编辑  收藏  举报