1. 程式人生 > >Web專案中對配置檔案中的密碼進行加密(資料庫連線密碼)

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()來實現。