2014-02-27 145 views
1

我期待看看是否有一種方法,我可以攔截屬性佔位符機制,如果我有解決的屬性值以某種方式標記爲加密,我可以解密和使用結果作爲解決的值。春天屬性佔位符解密已解決的屬性

Jasypt支持這樣的事情,但在嘗試裝飾bean之前實際解密所有屬性值。

任何想法或想法?

我有我自己的解密機制,並將值字符串標記爲以{AES}加密爲編碼值的前綴。

編輯因此,正如我上面所說的關於Jasypt的實現,以同樣的方式進行攔截會讓我獲得正確的解密,而我正在工作。我擔心的是 - 屬性集合保存在內存中的時間有多長,或者在佔位符配置器使用結束後會消失?

回答

4

如果以"{EAS}"開頭,您可以擴展PropertyPlaceholderConfigurer並覆蓋解密該方法的org.springframework.beans.factory.config.PropertyResourceConfigurer.convertPropertyValue(String)方法。像下面類的東西可以用作PropertyPlaceHolder

package foo.bar; 

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

public class EncryptationAwarePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{ 

@Override 
protected String convertPropertyValue(String originalValue) { 
    if (originalValue.startsWith("{AES}")) { 
     return decrypt(originalValue.substring(5)); 
    } 
    return originalValue; 
} 

private String decrypt(String value) { 
    return value.toLowerCase(); // here your decryption logic 
} 

}

你的背景下將有PropertyPlaceholder聲明:

<bean class="foo.bar.EncryptationAwarePropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>my.properties</value> 
    </property> 
</bean> 

你會使用屬性一樣容易:

@Value("${encryptedMyProtectedValue}") 
private String decryptedValue; 

編輯:org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(ConfigurableListableBeanFactory)將基本上加載屬性(到本地的屬性對象),轉換和處理它們。處理通過調用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(ConfigurableListableBeanFactory, Properties)發生。使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurerProperties對象在bean處理後將不會保留在內存中。它基本上只用於在你的上下文中設置bean的屬性,並將被丟棄。

+0

給你一個+1,因爲我已經通過了這部分:-)。我正在編輯我的問題關注 –

+0

檢查最後編輯:-) –