Свойства загрузки загрузочного приложения Spring изменяются программно для повышения безопасности - PullRequest
0 голосов
/ 17 октября 2018

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

spring.datasource.url=<<url>>
spring.datasource.username=<<username>>
spring.datasource.password=<<password>>

Мы не используем источник данных Spring для создания соединения вручную.Только Spring создает соединение с базой данных в JPA.,

Наше требование повысить безопасность без использования свойств БД в открытом тексте.Два возможных метода.

  1. Шифрование учетных данных базы данных
  2. Использование менеджера секретов AWS.(затем получите учетные данные при загрузке приложения)

Для опции 1 можно использовать jasypt , поскольку мы просто предоставляем только свойства и делаемНе хотите создавать источник данных вручную, как это сделать, чтобы понять с помощью Spring Framework является проблемой.Если лучше, я могу получить некоторые рабочие образцы или методы.

Что касается опции-2,

  • сначала нам нужно определить secretName.
  • используйте secertName и получите учетные данные базы данных от менеджера секретов AWS.
  • обновите application.properties программно, чтобы понять, как работает Spring.(Мне нужно знать этот шаг)

Мне нужно использовать либо option1, либо option2.Упоминаются проблемы с каждым вариантом.

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Я нашел решение для моей проблемы.

Нам нужно определить org.springframework.context.ApplicationListener в spring.factories файле.Он должен определить требуемый слушатель контекста приложения, как показано ниже.

org.springframework.context.ApplicationListener=com.sample.PropsLoader

Класс PropsLoader подобен этому.Файл

public class PropsLoader implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {


@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {

    ConfigurableEnvironment environment = event.getEnvironment();

    String appEnv          = environment.getProperty("application.env");
    //set new properties based on the application environment.  
    // calling other methods and depends on the enviornment and get the required value set  
    Properties props       = new Properties();
    props.put("new_property", "value");

    environment.getPropertySources().addFirst(new PropertiesPropertySource("props", props));

}

}

spring.factories должен быть определен в пакете resources и папке META-INF.

enter image description here

Это будетустановите контекст приложения с новыми свойствами перед загрузкой любых других bean-компонентов.

0 голосов
/ 17 октября 2018

Что вы можете сделать, это использовать переменные окружения для ваших свойств.Вы можете использовать их следующим образом:

spring.datasource.url=${SECRET_URL}

Затем вы можете получить их и запустить процесс Spring с помощью ProcessBuilder.(Или установите переменные любым другим способом)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...