目前在spring中加載propertioes文件中的數據庫資源的時候通常使用以下方式java
<context:property-placeholder location="classpath:jdbc.properties"/>
咱們可能會遇到數據庫用戶名和密碼的加密需求,因此特意寫一個博文來進行這樣的講解spring
在spring中有這樣一個方式ProepertyPlaceholderConfigurer方法 , 是用來加載上面配置文件方法的。咱們只須要繼承並重寫。其中的方法convertProperty。源代碼中這個方法的源碼爲數據庫
protected void convertProperties(Properties props) { Enumeration<?> propertyNames = props.propertyNames(); while (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); }
咱們只須要對convertProperty方法進行重寫便可。進行用戶名和密碼的解密操做。ide
/** * 重寫PropertyPlaceholderConfigurer 方法 這個方法是加載 * <context:property-placeholder location="classpath:jdbc.properties"/> * * 從新其中的convertProperty 方法 在這個方法裏面進行字符串的解密 * * * Created by abing on 2015/11/5. */ public class DescPropertyResourceConfigure extends PropertyPlaceholderConfigurer { /** * 返回解密之後文件類型 * @param propertyName * @param propertyValue * @return */ @Override protected String convertProperty(String propertyName, String propertyValue) { if (isDescStr(propertyName)){ return CommonSecurity.decode(propertyValue); } return propertyValue; } /** * 判斷獲取到的是否是指定的字段 * * @param propertyName * @return */ public static boolean isDescStr(String propertyName){ boolean b = false; if (propertyName.indexOf(Constant.USERNAME) >= 0 || propertyName.indexOf(Constant.PASSWORD) >= 0){ b =true; } return b; } }
代碼已經成功了。須要在spring的配置文件中進行配置。測試
配置有以下方式
加密
方式一 : spa
<bean id="descPropertyResourceConfigure" class="com.inga.utils.properties.DescPropertyResourceConfigure" p:location="classpath:jdbc.properties"/>
方式二:.net
<bean id="descPropertyResourceConfigure" class="com.inga.utils.properties.DescPropertyResourceConfigure" > <property name="location" value="classpath:jdbc.properties"/> </bean>
方式三:code
<bean id="descPropertyResourceConfigure" class="com.inga.utils.properties.DescPropertyResourceConfigure" > <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean>
配置完成之後便可進行測試。其中加解密的地方能夠參考個人博文blog
http://my.oschina.net/u/1023341/blog/526601