我们正在使用弹簧4占位器功能
<context:property-placeholder location="classpath:/configs/*.properties,classpath:/configs/specific/*-config.properties" />
属性文件:
##sample.properties
user=admin
password=123
我们尝试加密属性文件中的密码。所以属性文件将是
##sample.properties
user=admin
password=ENC(RE%%$XC)
我发现春天已经预测到了这一点。正如http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/PropertyResourceConfigurer.html中所述,convertPropertyValue
方法已被记录为:
将给定属性值从属性源转换为 值应该应用。
默认实现只返回原始值。可 在子类中重写,例如检测加密值和 相应地解密它们。
但我不知道如何使用它?我试图定义一个新的bean:
<bean class="foo.bar.security.DecryptPropertyConfigurer">
<property name="locations">
<list>
<value>classpath:/configs/*.properties</value>
<value>classpath:/configs/bsi/*-config.properties</value>
</list>
</property>
</bean>
并且
public class DecryptPropertyConfigurer extends PropertySourcesPlaceholderConfigurer {
@Override
protected String convertPropertyValue(String originalValue){
//if value is between ENC() then decrypt it
//return originalValue or decrypted value;
}
}
当我在convertPropertyValue
处设置断点时,它似乎永远不会被调用。
http://romiawasthy.blogspot.com/2012/02/encryptdecrpt-properties-in-spring.html包含一些不错的信息,但对我没有帮助。
答案 0 :(得分:3)
这似乎是春天https://jira.spring.io/browse/SPR-8928的一个错误。
作为评论的解决方法,可以使用doProcessProperties
作为
protected void doProcessProperties(ConfigurableListableBeanFactory beanFactoryToProcess, final StringValueResolver valueResolver) {
super.doProcessProperties(beanFactoryToProcess,
new StringValueResolver() {
@Override
public String resolveStringValue(String strVal) {
return convertPropertyValue(valueResolver.resolveStringValue(strVal));
}
}
);
}
Michael Gallag的信用