美文网首页
加密JDBC配置文件中的用户密码

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

作者: mikeliuy | 来源:发表于2017-05-09 10:17 被阅读1665次

    项目中使用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=
    

    相关文章

      网友评论

          本文标题:加密JDBC配置文件中的用户密码

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