在Spring 4 / Boot中完全集成加密属性

时间:2014-09-29 08:45:47

标签: spring spring-boot jasypt

我们使用Jasypt加密一些配置属性(数据库密码),但由于解密密钥存储在每个环境的文件系统中,我们必须进行一些手动@Bean配置以从文件加载密码然后覆盖使用EncryptablePropertiesPropertySource加载属性。

因为它是如此手动,我们不得不在@PostConstruct类的WebApplicationConfig中运行此代码并且(虽然这还没有发生)但是它存在在数据源之后加载这些代码的风险bean配置了对Environment的调用 - 给出空指针异常。 @Lazy加载是一个选项,但显然这意味着我们将使用我们想要避免的脆弱配置。

最终我们希望能够使用默认的classpath:application.properties,因此不希望影响现有(默认)设置,但我们希望能够使用加密属性源作为完整替代Spring一,并且让Spring在其他任何事情发生之前加载来自文件的解密代码。有没有办法在应用程序启动和配置早期更紧密地集成加载加密属性?

2 个答案:

答案 0 :(得分:11)

我正在“剪裁”我之前的答案,因为它已被删除,因为它是一个不同的问题重复:

这个库完全符合您的需要jasypt-spring-boot,它基本上允许您使用@PropertySource注释以您习惯的方式定义属性。您只需要在配置文件中添加一个额外的注释(@EnableEncryptableProperties)。 它不仅限于此,环境中存在的每个PropertySource都将转换为EncryptablePropertySourceWrapper,这是一个自定义包装器,用于检查属性何时加密并在访问时对其进行解密。

答案 1 :(得分:2)

评论部分提供的链接Dave遗憾地指向现在什么都没有,但是从它的根导航我得到了以下示例项目: https://github.com/spring-cloud-samples/configserver(当然也主要由Dave撰写)

我认为它是迄今为止评论中所讨论内容的一个很好的例子。

此外,为了将来参考(可能会在某些时候完成),还有一个Spring Framework Jira票证,用于使用加密属性的功能:https://jira.spring.io/browse/SPR-12420