Web项目中对配置文件中的密码进行加密(数据库连接密码)

Web项目的如配置文件applicationContext.xml文件中,如数据库连接的用户密码信息的加密。


我们平时直接写的项目配置是这样的:


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close"   
        p:driverClassName="net.sourceforge.jtds.jdbc.Driver"  
        p:url="jdbc:jtds:sqlserver://localhost:1433;DatabaseName=demo1"   
        p:username="abc"  
        p:password="12345678" />  


对于用户信息,一般我们将其提取到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="${password}" />  
为了杜绝一个具备中间件服务器机器访问权限的人,看到了这个例如applicationContext.xml的文件,我们仅仅把它写入property文件还不够,因为这样在web运行后在 后台还是会直接显露出用户名密码。


故其中最关键的点就放在了上面抓取jdbc.properties类中了。

下面的问题是,如何将jdbc.properties变成一个看不明白的字符呢?我们只需要扩展PropertyPlaceholderConfigurer父类PropertyResourceConfigurer的解密方法convertProperty就可以了:


package com.hf.common;

import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class ConvertPwdPropertyConfigurer extends PropertyPlaceholderConfigurer{
	
	@Override
	protected String convertProperty(String propertyName,String propertyValue)
	{
		System.out.println("=================="+propertyName+":"+propertyValue);  
		if("dataSource.username".equals(propertyName))
		{
			return "abc";
		}
		if("dataSource.password".equals(propertyName))
		{
			return "1234567";
		}
		return propertyValue;
	}
}

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

<bean id="propertyConfig" 
	  class="com.hf.common.ConvertPwdPropertyConfigurer">
	  <property name="locations"><!-- locations应为类中的属性 -->
	   <value>classpath:jdbc.properties</value>
	  </property>
	 </bean>

而在property文件中可以对其中的想要 加密 的信息改写:

username=someOneElseUnkonwUserName
password=someOneElseUnkonwUserName
driverClassName=net.sourceforge.jtds.jdbc.Driver
url=jdbc\:jtds\:sqlserver\://localhost\:1433;DatabaseName\=demo


其实其中原理还是,通过使用spring提供的PropertyPlaceholderConfigurer读取数据库配置信息.properties

而通过重写PropertyPlaceholderConfigurer的子类方法convertProperty()来实现。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值