Полная интеграция зашифрованных свойств в Spring 4/Boot

Мы используем Jasypt для шифрования некоторых свойств конфигурации (паролей базы данных), но поскольку ключ дешифрования хранится в каждой файловой системе среды, мы должны выполнить некоторую ручную конфигурацию @Bean, чтобы загрузить пароль из файла, а затем наложить свойства загрузки с EncryptablePropertiesPropertySource.

Поскольку это так вручную, нам пришлось запустить этот код в @PostConstruct класса WebApplicationConfig и (хотя этого еще не произошло), он рискует загрузить их после того, как источник данных bean сконфигурирован с вызовами Environment - предоставления исключения нулевого указателя. @Lazy Загрузка будет вариантом, но, очевидно, это означает, что мы будем работать с хрупкой конфигурацией, которую мы бы хотели избежать.

В конечном итоге мы хотим иметь возможность использовать classpath:application.properties по умолчанию, поэтому не хотим влиять на существующую (по умолчанию) настройку, но мы хотим иметь возможность использования источника шифруемого свойства в качестве полной замены Spring one и Spring загрузить код дешифрования из файла, прежде чем что-либо еще произойдет. Есть ли способ упростить интеграцию загрузки зашифрованных свойств ранее при запуске и настройке приложения?

Ответ 1

Я "сглаживаю" свой предыдущий ответ, так как он удаляется, потому что он дублируется из другого вопроса:

Эта библиотека делает именно то, что вам нужно jasypt-spring-boot, что в основном позволяет использовать аннотацию @PropertySource для определения ваших свойств таким же образом вы используете. Вам просто нужно добавить дополнительную аннотацию (@EnableEncryptableProperties) в файл конфигурации. Это не ограничивается этим, каждый PropertySource, присутствующий в среде, будет преобразован в EncryptablePropertySourceWrapper, настраиваемую оболочку, которая проверяет, когда свойство зашифровано и расшифровывает его при доступе.

Ответ 2

Ссылка Dave, представленная в разделе комментариев, к сожалению, указывает на то, что сейчас нет, но, переходя от своего корня, я получил следующий пример проекта: https://github.com/spring-cloud-samples/configserver (также написано, в основном, Дэйвом, конечно)

Я думаю, что он служит отличным примером того, что обсуждалось в комментариях до сих пор.

Кроме того, для справок в будущем (возможно, это будет сделано в какой-то момент), есть билет Spring Framework Jira для функции использования зашифрованных свойств: https://jira.spring.io/browse/SPR-12420