java web项目中对数据库用户名密码加密的一种解决方案

原文路径:https://blog.csdn.net/u010463032/article/details/7900906

我们使用的项目经常是这个样子的:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSour

    destroy-method="close"  

    p:driverClassName="oracle.jdbc.driver.OracleDriver" 

    p:url="jdbc:oracle:thin:@127.0.0.1:1523:orcl"  

    p:username="czw" 

    p:password="czw" />

 

这里会有一个致命的问题,如果有一个具备中间件服务器机器访问权限的人,看到了这个例如applicationContext.xml的文件,并且打开该文件,智商再低下的人也会知道数据库的用户名和密码是什么。这对于对安全有一定要求的行业是必须杜绝的,这个也是在一般技术面试中会问到的一个问题。那就让我们继续往下,解答这个问题吧!

首先,我们需要将配置文件抽取到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}" />

将上面的第一个代码修改为第二个代码,第一个类是负责抓取jdbc.properties中的属性并且填充到dataSource当中来,这样,我们就可以将所有的注意力都集中在jdbc.properties上了。

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


package com.cardDemo.commonUtil; 
	   
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); 

	       return "czw"; 
	    } 
	    if("password".equals(propertyName)){ 
	       return "czw"; 
	    } 
	       return propertyValue; 
	 } 
}


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


<bean class="com.cardDemo.commonUtil.ConvertPwdPropertyConfigurer" 
   p:location="classpath:jdbc.properties" 
   p:fileEncoding="utf-8" 
/>


事实上,在我刚刚的Demo项目当中,里面的jdbc.properties里面的文件是如下内容的:

driverClassName=oracle.jdbc.driver.OracleDriver  
url=jdbc:oracle:thin:@127.0.0.1:1523:orcl  
userName=someOneElseUnknowUserName  
password=somePwdElseUnknowPassowrd  

而实际上,真实的密码却是czw/czw

但是,在DATASOURCE里面获取到的内容,却是替换之后的正确的用户名和密码。这只是一个非常简单的例子,只是告诉我们一个解决数据库用户名和密码加密的一个渠道,比如,我们可以在PropertyPlaceholderConfigurer子类中写一些比较复杂的逻辑,比如根据jdbc.properties中配置的文件中进行各种手段的加密。在其中通过其他手段替换jdbc.propertes中的用户名和密码等等。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值