我正在尝试找出一种方法,以便在它们静止时以加密形式存储某些属性,并在将属性注入任何bean之前对它们进行透明解密,无论它们是使用@Value还是已定义在xml中通过设置属性。我们还没有使用弹簧靴。属性文件如下所示:
db_password={aes}some_encrypted_value
我可以在日志中看到PropertySourcesPropertyResolver
获取我的属性的值。创建我自己的PropertySourcesPropertyResolver.getProperty
方法实现应该非常简单,该方法查找“{aes}”前缀,必要时对其进行解密,但我无法弄清楚如何在我的应用程序中使用我的子类。
有没有人知道如何使用我的实现代替Springs?
我最初尝试使用在Spring 3中为我工作的PropertySourcesPlaceholderConfigurer
,但我无法弄清楚如何在春季4中使它工作。我也无法获得更新的{{1}工作要么。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
我们使用Spring 4.0.3 RELEASE
进行如下操作public class MyPropertyConfigurer extends PropertyPlaceHolderConfigurer{
protected void convertProperties(Properties props){
Enumeration<?> propertyNames = props.propertyNames();
while(propertyNames.hasMoreElements()){
String propName = (String)propertyNames.nextElement();
String propValue = (String)props.getProperty(propName);
if(propName.indexOf("db_password") != -1){
setPropertyValue(props,propName,propValue);
}
}
}
private void setPropertyValue(Properties props,String propName,String propValue){
String decryptedValue = PasswordUtility.decrypt(propValue);
props.setProperty(propName,decryptedValue);
}
}
在xml中,它配置如下
<bean id="dbPropertyPlaceholder" class="mypackage.MyPropertyConfigurer">
<property name="locations">
<list>
<value>file:myProp.properties</value>
<list>
</property>
</bean>