加密JDBC配置文件中的用户密码

2017-05-09  本文已影响1665人  mikeliuy

项目中使用JDBC连接数据库,一般配置如下:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close"   
    p:driverClassName="oracle.jdbc.driver.OracleDriver"  
    p:url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"   
    p:username="test"  
    p:password="test" />  

如果有用户这台服务器访问权限(比如root),就可以看到这个applicationContext.xml文件,并且打开文件获取数据库的用户和密码,所以不够安全,需要对这里的密码进行加密。

首先,将配置文件中这些value抽取到property文件中。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"  
    p:location="classpath:jdbc.properties"  
    p:fileEncoding="utf-8" />  
      
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close"   
    p:driverClassName="${driverClassname}"  
    p:url="${url}"   
    p:username="${username}"  
    p:password="${passwd}" />  

PropertyPlaceholderConfigurer类是负责抓取jdbc.properties中的属性值,填充到dataSource中相应的位置。

接下来,将jdbc.properties中的密码值进行压缩(可以使用其它方式),得到一个不易记忆的字符串,这需要实现PropertyPlaceholderConfigurer(extends PropertyResourceConfigurer)的解密方法convertProperty。

package net.jdbc.util;  
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 
import net.jdbc.util.ZipUtil; 
  
public class JdbcPwdPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{  
    @Override  
    protected String convertProperty(String propertyName, String propertyValue) {  
        System.out.println(propertyName + " -> " + propertyValue);  
        if("passwd".equals(propertyName)){  
            return ZipUtil.unzip(propertyValue);  
        }  
        return propertyValue;  
    }  
}  

然后在配置文件中,将JdbcPwdPropertyPlaceholderConfigurer类替换PropertyPlaceholderConfigurer。

<bean class="net.jdbc.util.JdbcPwdPropertyPlaceholderConfigurer"  
    p:location="classpath:jdbc.properties"  
    p:fileEncoding="utf-8"/>  

jdbc.properties文件内容如下:

driverClassname=oracle.jdbc.driver.OracleDriver  
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl  
username=test
passwd=UEsDBBQACAgIAK5QqUoAAAAAAAAAAAAAAAABAAAAMCtJLS4BAFBLBwgMfn/YBgAAAAQAAAA=

进行单元测试,打印日志内容。

driverClassname -> oracle.jdbc.driver.OracleDriver
url -> jdbc:oracle:thin:@127.0.0.1:1523:orcl
username -> test
passwd -> UEsDBBQACAgIAK5QqUoAAAAAAAAAAAAAAAABAAAAMCtJLS4BAFBLBwgMfn/YBgAAAAQAAAA=
上一篇下一篇

猜你喜欢

热点阅读