Каков правильный подход к расширению Spring Cloud Config Client?

Я хочу заменить базовую аутентификацию для Spring Cloud Config Server реализацией oAuth. Давайте пока оставим Config Server в покое и сосредоточимся на изменениях для Config Client. Очевидно, я не хочу писать свою собственную реализацию для всего этого, а вместо этого выполняю свою собственную логику и откатываюсь на стандартный клиент конфигурации. Также мне нужно упаковать свои изменения в библиотеку, так как я буду использовать ее в нескольких микросервисах.

Короче говоря, я хочу добиться следующего:

1а. Создайте собственный Starter, который будет содержать клиент Spring Cloud Config в качестве зависимости. Это вообще выполнимо или необходимо?

or

1b. Создайте собственный стартер только с моей настраиваемой логикой, который будет выполняться перед клиентом Spring Cloud Config. В этом случае каждый микросервис будет иметь Spring Cloud Config Client и настраиваемый Starter в качестве зависимостей. Как я могу управлять порядком выполнения и вводить результаты пользовательской логики в Config Client?

2. Введите новые настройки начальной загрузки. например spring.cloud.config.custom.username и spring.cloud.config.custom.password (необязательно).

3. Введите пользовательскую аннотацию для пользовательского Starter. например @enableCustomConfigClient (необязательно).

Я начал с создания собственного Starter со следующим кодом в /resources/META-INF/spring.factories:

# Bootstrap components
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.example.greeter.config.ConfigClientBootstrapConfiguration

Но этот код вызывается после установки профиля, а не первое, что делает Config Client.

Любые предложения и особенно примеры кода приветствуются. Спасибо!


person Evgeny M    schedule 22.07.2017    source источник
comment
Вам нужен правильный порядок   -  person spencergibb    schedule 23.07.2017
comment
@spencergibb Спасибо. Не могли бы вы уточнить? Может быть, какие-нибудь образцы кода? 1b правильный?   -  person Evgeny M    schedule 23.07.2017
comment
Еще раз спасибо, Спенсер. Думаю, я понял. Стоит отметить, что LOWEST_PRECEDENCE будет выполняться первым, но не последним: @Order (Ordered.LOWEST_PRECEDENCE). Я опубликую более подробную информацию позже для использования в будущем. На всякий случай у кого-то возникнет такой же вопрос.   -  person Evgeny M    schedule 24.07.2017


Ответы (1)


Подход к размещению я выбрал для использования в будущем.

  1. Создайте новый пакет, который будет выполняться поверх клиента Spring Cloud Config или перед ним. Здесь две основные особенности:

    • Создайте файл src / main / resources / META-INF / spring.factories с помощью org.springframework.cloud.bootstrap.BootstrapConfiguration = {YOUR_CLASS}.

    • В {YOUR_CLASS} примените собственную логику. Не забудьте использовать @ org.springframework.core.annotation.Order ({YOUR_PRECEDENCE}) и тот факт, что Ordered.LOWEST_PRECEDENCE будет выполнен первым

  2. Создайте банку из предыдущего шага и включите ее в свой проект (как локальный файл или через артефактор)

  3. Добавьте настраиваемую логику в Spring Cloud Config Server, чтобы он мог использовать JWT.

Рабочий пример находится здесь: https://github.com/ka4ok85/spring-cloud-config-client-jwt

person Evgeny M    schedule 08.08.2017