java - 在 spring 上下文加载期间更新属性文件

标签 java spring jasypt property-placeholder

我想将 Jasypt 库与 spring 属性机制集成。

在此处的示例教程中:http://www.jasypt.org/spring31.html作者假设用户手动执行加密,然后仅将 ENC( ) 占位符之间的加密值传递到配置文件。这对我来说还不够。

我想实现给定的场景:

  1. 将此行放入具有属性的文件中:

    datasource.password=DEC(mysecretpassword)
    
  2. 启动应用程序

  3. Spring 框架将加密密码(使用 jasypt)并将上面的行替换为:

    datasource.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm)
    

在进一步启动时,spring仅解密加密值(例如使用org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer)并且文件不会被修改。

我想我需要创建自己的 Spring 的 PropertyPlaceholderConfigurer 但我看不到任何修改文件的可能性。

我可以将自定义org.springframework.util.PropertiesPersister设置为我的PropertyPlaceholderConfigurer,好吧,但我仍然不知道我需要更新哪个文件(在我的spring @Configuration中可能有许多属性位置,某些属性可以用另一个文件等中的值覆盖)。

换句话说:我需要在属性资源解析和合并之后、但在将值注入(inject)到另一个 bean 之前注入(inject)我的(解密)加密逻辑。

感谢您提前提供有关如何解决此问题的任何建议。

最佳答案

我用在 jira 中找到的解决方案解决了一个老问题,但现在找不到它。无论如何,This是一个非常相似的解决方案,通过这种方式,您可以“告诉”固件在加载 dataSource beans 之前加载您的propertiesPlaceHolder 文件。

关于java - 在 spring 上下文加载期间更新属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35533873/

相关文章:

Java 内部类和嵌套类

java - 无法将 Jasypt 加密密码保存到 .properties 文件

java - Spring Security + CAS SSO 身份验证管理器

java - 查询异常 : ResultTransformer is not allowed for 'select new' queries

java - Spring : Use Hibernate types without hibernate. cgf.xml

java - Jasypt 无法使用 Spring 从系统环境变量中解密密码

java - 如何从哈希表中的 (K,V) 节点获取 V 返回到另一个类中的调用方法?

java - Joda-Time 中两个日期之间的天数

java - 替换 Java Bean 的 instanceof

java - @ConfigurationProperties 前缀不起作用