美文网首页Java 杂谈java进阶干货
Druid数据源配置文件加密

Druid数据源配置文件加密

作者: binxin5108 | 来源:发表于2017-12-07 17:48 被阅读0次

1. 背景

我们在开发应用时,需要连接数据库,一般把数据库信息放在一个属性配置文件中,比如dbconfig.properties,具体的内容大概是这样:

#MySql数据库配置
connection.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
connection.username=root
connection.password=123456

里面用明文的方式存储着数据库的敏感信息用户名username和密码password,这是不好的行为,容易产生安全问题。那我们如何实现加密存储呢?实现方式有多种,下面将采用一种简单便捷的方案。

2. 实现原理

实现原理其实很简单,配置文件存储加密后的用户名和密码,重写Druid数据源的两个方法setUsername(String username)setPassword(String password)对信息解密。

3. 实现方式

3.1 写加密工具

首先得有一个加密工具,具有加解密功能,这里为了方便直接使用Druid中的工具类com.alibaba.druid.filter.config.ConfigTools。使用其中的encrypt(String plainText)方法和decrypt(String cipherText)方法采用默认的公私玥加解密。

3.2 加密配置文件

调用encrypt(明文)方法获取密文配置到属性文件中去:

#MySql数据库配置
connection.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
connection.username=bNVOqb7WKLX5Bjnw+LMv92taj25KOxDimXxILPQjw42wgv+1lHzOH8kr97xDwWdhpY67QuYCS7sWN4W46YbkFA==
connection.password=Biyu5YzU+6sxDRbmWEa3B2uUcImzDo0BuXjTlL505+/pTb+/0Oqd3ou1R6J8+9Fy3CYrM18nBDqf6wAaPgUGOg==
3.3 创建自己的数据源

新建类SecurityDateSource继承数据源DruidDataSource并重写其中设置用户名和密码的方法:

package cn.zhoubg.core.database;

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

public class SecurityDateSource extends DruidDataSource{
    @Override
    public void setUsername(String username) {
        try {
            username = ConfigTools.decrypt(username);
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.setUsername(username);
    }

    @Override
    public void setPassword(String password) {
        try {
            password = ConfigTools.decrypt(password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.setPassword(password);
    }

    public static void main(String[] args) throws Exception{
        String password = "123456";
        String username = "root";
        System.out.println("加密后的password = [" + ConfigTools.encrypt(password) + "]");
        System.out.println("加密后的username = [" + ConfigTools.encrypt(username) + "]");
    }
}
3.4 Spring文件中配置数据源

注意将class改为自己的新建的数据源

<bean id="dataSource" class="cn.zhoubg.core.database.SecurityDateSource"
    init-method="init" destroy-method="close">
    <property name="url" value="${connection.url}" />
    <property name="username" value="${connection.username}" />
    <property name="password" value="${connection.password}" />
    ...省略其他配置...
</bean>

4. 其他

上面只是针对Druid数据源做配置,其他数据源(如DBCP ,C3P0等)都可以采用类似的思路加密配置文件。

相关文章

网友评论

    本文标题:Druid数据源配置文件加密

    本文链接:https://www.haomeiwen.com/subject/nwtjixtx.html