如果以"{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.PropertyPlaceholderConfigurer
Properties
對象在bean處理後將不會保留在內存中。它基本上只用於在你的上下文中設置bean的屬性,並將被丟棄。
給你一個+1,因爲我已經通過了這部分:-)。我正在編輯我的問題關注 –
檢查最後編輯:-) –