美文网首页
加密-解密:jdbc配置文件

加密-解密:jdbc配置文件

作者: 游园拾忆 | 来源:发表于2018-01-05 15:15 被阅读85次

在属性文件中将数据库的用户名和密码等敏感信息以明文的方式写在文件中,这是非常不安全的,所以我们就需要将属性文件中的部分信息进行加密处理以提高安全性。

下面介绍如何运用spring中的PropertyPlaceholderConfigurer类对加密的属性值进行解密处理。

  PropertyPlaceholderConfigurer类本身对加密的数据不做任何处理的,所以我们需要自定义类继承PropertyPlaceholderConfigurer,并且重写父类中的方法。通过spring源码我们可以看到PropertyPlaceholderConfigurer类uml图如下所示。

UML图

  PropertyResourceConfigurer类实现BeanFactoryPostProcessor接口是一个后置处理器类,找到postProcessBeanFactory方法发现跟获取属性值有关的方法为convertProperties方法,源码如下所示:

protected void convertProperties(Properties props) {  
    for(Enumeration propertyNames = props.propertyNames(); propertyNames.hasMoreElements();){  
        String propertyName = (String) propertyNames.nextElement();  
        String propertyValue = props.getProperty(propertyName);  
        String convertedValue = convertProperty(propertyName, propertyValue);  
        if(!ObjectUtils.nullSafeEquals(propertyValue, convertedValue))  
            props.setProperty(propertyName, convertedValue);  
    }  
}  
  
protected String convertProperty(String propertyName,String propertyValue) {  
    return convertPropertyValue(propertyValue);  
}  
  
protected String convertPropertyValue(String originalValue) {  
    return originalValue;  
}  

  看到这里我们就可以清楚的知道spring是通过该类中的 convertProperty方法返回对应属性名处理后的属性值的,convertProperty方法中调用了convertPropertyValue方法用于返回属性值。

  所以如果我们要对属性文件中的所有属性值进行解密处理,就只需重写convertPropertyValue方法, 如果针对指定的属性名做解密处理,重写convertProperty方法就可以了。子类代码如下所示:

//指定的属性名解密
public class ConvertPwdPropertyConfigurer extends PropertyPlaceholderConfigurer{  
    @Override  
    protected String convertProperty(String propertyName, String propertyValue) {  
        System.out.println("=================="+propertyName+":"+propertyValue);  
        if("userName".equals(propertyName)){  
            return DesUtils.getDecryptString(propertyValue);//调用解密方法 
        }  
        if("password".equals(propertyName)){  
            return DesUtils.getDecryptString(propertyValue);//调用解密方法  
        }  
        return propertyValue;  
    }  
}

然后将上面完成的类替换配置文件中的PropertyPlaceholderConfigurer

<bean id="propertyConfigurer" class="com.mandi.common.ConvertPwdPropertyConfigurer ">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
</bean>

<bean id="c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="${driverClass}"></property>
        <property name="jdbcUrl" value="${jdbcUrl}"></property>
        <property name="user" value="${userName}"></property>
        <property name="password" value="${password}"></property>
        ······

相关文章

  • 加密-解密:jdbc配置文件

    在属性文件中将数据库的用户名和密码等敏感信息以明文的方式写在文件中,这是非常不安全的,所以我们就需要将属性文件中的...

  • AES加密代码(.net和java可互转)

    .net加密解密代码 java加密解密代码

  • 最近用到的一些String的一些常用方法

    string的Base64加密/解密 oc 加密 oc解密 swift 加密 swift 解密 oc字典转jso...

  • https简单介绍

    # 对称加密 加密解密使用同一个密钥,速度较快,如aes # 非对称加密 公钥加密,私钥解密,私钥加密,公钥解密,...

  • 加密

    来源于:MD5加密,Base64加密/解密,AES加密/解密

  • Rsa加解密

    /*** Rsa 加解密* 用法:* (1)公钥加密,私钥解密* (2)私钥加密,公钥解密*/class ...

  • iOS开发证书相关总结

    加密、解密 对称加密、非对称加密 对称加密:加密、解密使用相同的密钥;DES、AES(Mac、Windows的磁盘...

  • Java AES/DES加密&解密

    DES DES加密&解密代码如下: AES AES加密&解密代码如下:

  • 非对称加密和对称加密

    非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下: 1、加密和解密过程不...

  • 非对称加密和对称加密的区别

    非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下: 1、加密和解密过程不...

网友评论

      本文标题:加密-解密:jdbc配置文件

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