Web專案中對配置檔案中的密碼進行加密(資料庫連線密碼)
阿新 • • 發佈:2019-01-11
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檔案中
為了杜絕一個具備中介軟體伺服器機器訪問許可權的人,看到了這個例如applicationContext.xml的檔案,我們僅僅把它寫入property檔案還不夠,因為這樣在web執行後在後臺還是會直接顯露出使用者名稱密碼。<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類中了。
下面的問題是,如何將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()來實現。