Компонент должен иметь возможность расшифровать любое свойство 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
Мобильная версия