如何使用Spring 4 convertPropertyValue(用于读取加密值)?

时间:2016-02-23 06:34:49

标签: java spring spring-4

我们正在使用弹簧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包含一些不错的信息,但对我没有帮助。

1 个答案:

答案 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的信用