Расшифровка свойств SpringJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Расшифровка свойств Spring

Сообщение Anonymous »

У нас есть несколько устаревших приложений Spring, которые еще не перенесены в Spring-Boot или Spring Cloud, а также приложения Spring Boot. Я работаю над созданием компонента Spring, который будет автоматически расшифровывать свойства Spring при загрузке среды, если значение свойства зашифровано и имеет префикс. Свойства могут находиться в файлах .properties (для устаревших приложений) или в файлах .yaml (более новые приложения Spring Boot).

Компонент должен иметь возможность расшифровать любое свойство Spring. независимо от источника и должен работать с любой версией Spring и не быть привязанным к загрузке Spring. Компонент также должен прозрачно расшифровывать свойства. Он должен прочитать парольную фразу из файла свойств, поэтому файл парольной фразы необходимо загрузить в начале.

У нас есть собственное шифрование/дешифрование, и мы не хотим использовать jaspyt.

Что уже пробовалось:

Мне понравился этот подход создания ApplicationListener, но это связано с весенней загрузкой (ApplicationEnvironmentPreparedEvent). С событиями Spring, такими как ContextRefreshed или ContextStart, я не понимаю, как я могу получить ConfigurationApplicationContext/ConfigurableEnvironment. Кто-нибудь создал прослушиватель для шифрования/дешифрования без весенней загрузки/облака?

Я также создал собственный ApplicationContextInitializer и добавил его в контекстный параметр web.xml, но это не Кажется, это работает. Когда я отлаживаю его, я не думаю, что он загружает/читает свойства из моего файла app.properties.

Код: Выделить всё

       @Component
public class DecryptingPropertyContextInitializer implements ApplicationContextInitializer {

@Override
public void initialize( ConfigurableApplicationContext applicationContext ) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
for ( PropertySource propertySource : environment.getPropertySources() ) {
Map propertyOverrides = new LinkedHashMap();
decodePasswords( propertySource, propertyOverrides );
if ( !propertyOverrides.isEmpty() ) {
PropertySource decodedProperties = new MapPropertySource( "decoded " + propertySource.getName(),
propertyOverrides );
environment.getPropertySources().addBefore( propertySource.getName(), decodedProperties );
}
}
}

private void decodePasswords(PropertySource source, Map propertyOverrides) {
if ( source instanceof EnumerablePropertySource ) {
EnumerablePropertySource enumerablePropertySource = (EnumerablePropertySource) source;
for ( String key : enumerablePropertySource.getPropertyNames() ) {
Object rawValue = source.getProperty( key );
if ( rawValue instanceof String ) {
//decrypt logic here
propertyOverrides.put( key, decryptedValue );
}
}
}
}
}
Кто-нибудь делал что-то подобное или есть идеи получше? Есть ли способ прослушивать события приложения, а затем обрабатывать их?
Благодарю за вашу помощь

Подробнее здесь: https://stackoverflow.com/questions/559 ... decryption
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»