我们're using Jasypt to encrypt some config properties (database passwords) but since the decryption key is stored on each environment'的文件系统我们要做一些手工 @Bean
配置来从文件加载密码然后用 EncryptablePropertiesPropertySource
覆盖加载属性 .
因为它是如此手动,我们必须在 WebApplicationConfig
类的 @PostConstruct
中运行此代码并且(虽然这还没有发生)但是在数据源bean配置了对 Environment
的调用之后,它会冒着加载这些代码的风险 - 给出null指针异常 . @Lazy
加载将是一个选项,但显然这意味着我们想要避免 .
最终我们希望能够使用默认的 classpath:application.properties
,所以不要影响现有(默认)设置,但我们确实希望能够使用加密属性源作为Spring的完全替代,并拥有Spring在发生任何其他事情之前从文件加载解密代码 . 有没有办法在应用程序启动和配置早期更紧密地集成加载加密属性?
2 回答
我正在“剪裁”我之前的答案,因为它被删除,因为它是一个不同的问题重复:
这个库完全符合您的需要jasypt-spring-boot,它基本上允许您使用@PropertySource批注以您习惯的方式定义属性 . 您只需要在配置文件中添加一个额外的注释(@EnableEncryptableProperties) . 它不仅限于此,环境中存在的每个PropertySource都将转换为EncryptablePropertySourceWrapper,这是一个自定义包装器,用于检查属性何时加密并在访问时对其进行解密 .
遗憾的是,评论部分中提供的链接Dave现在没有任何结果,但是从它的根导航我得到了以下示例项目:https://github.com/spring-cloud-samples/configserver(当然也主要由Dave编写)
我认为这是迄今为止评论中讨论的内容的一个很好的例子 .
此外,为了将来参考(可能会在某些时候完成),还有一个Spring Framework Jira票证,用于使用加密属性的功能:https://jira.spring.io/browse/SPR-12420