如何在Spring 4中创建PropertySourcesPropertyResolver的子类?

时间:2017-12-18 20:44:55

标签: spring

我正在尝试找出一种方法,以便在它们静止时以加密形式存储某些属性,并在将属性注入任何bean之前对它们进行透明解密,无论它们是使用@Value还是已定义在xml中通过设置属性。我们还没有使用弹簧靴。属性文件如下所示:

db_password={aes}some_encrypted_value

我可以在日志中看到PropertySourcesPropertyResolver获取我的属性的值。创建我自己的PropertySourcesPropertyResolver.getProperty方法实现应该非常简单,该方法查找“{aes}”前缀,必要时对其进行解密,但我无法弄清楚如何在我的应用程序中使用我的子类。

有没有人知道如何使用我的实现代替Springs?

我最初尝试使用在Spring 3中为我工作的PropertySourcesPlaceholderConfigurer,但我无法弄清楚如何在春季4中使它工作。我也无法获得更新的{{1}工作要么。

有人能指出我正确的方向吗?

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>