如何将 Jasypt 与配置为 Java 的 Spring 4 应用程序集成?

How to integrate Jasypt with a Spring 4 app with Java configuration?

我想在我的 Spring 4 应用程序(没有 Spring 引导)中添加使用 Jasypt 的属性文件加密。配置在Java.

我找到了 Spring 3.1 XML 配置和 Spring 引导的解决方案,但没有 Spring4 Java 配置。

我尝试按照 3.1 (http://www.jasypt.org/spring31.html) 文档中的建议以 Java 配置方式声明它,但它没有加载属性。

@Bean
public EncryptablePropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {
    EncryptablePropertyPlaceholderConfigurer propertyPlaceholderConfigurer = new EncryptablePropertyPlaceholderConfigurer(new OurCustomEncryptor());
    propertyPlaceholderConfigurer.setLocations(
            new ClassPathResource("config-encrypted.properties")
    );
    return propertyPlaceholderConfigurer;
}

有什么想法吗?

实际上问题是双重的:

首先,我在配置中的其他地方声明了另一个 PropertyPlaceholderConfigurer,它似乎覆盖了这个。

@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
    return new PropertySourcesPlaceholderConfigurer();
}

所以摆脱它让我走得更远。

其次,它适用于使用 @Value 注释注入的属性,但在尝试通过 Spring Environment#getProperty 方法检索值时无效。这是因为如 this answer 中所述,PropertyPlaceholderConfigurer 仅在创建 bean 期间有效。