В отличие от ConditionalOnMissingBean

Итак, у меня есть стандартное веб-приложение Spring Boot. И у меня есть требование разрешить несколько механизмов аутентификации. Поэтому я хочу иметь файлы jar, которые обрабатывают различную аутентификацию. Один для сервера SAML, CAS, OAuth и т. д.

Я хочу, чтобы в моем «базовом» военном файле использовался стандартный jdbc (что он и делает сейчас), но я хочу иметь возможность поместить свой, скажем, CAS-security.jar в путь к классам и использовать Spring его AuthenticationProvider. Прямо сейчас у меня это в моем классе Application.java

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth
    .authenticationProvider(authenticationProvider)
    .userDetailsService(userDetailsService);
}

И я @Autowire провайдер и сервис, которые определены как @Bean как обычно ...

Но я хочу аннотировать (я думаю) эти определения @Bean, чтобы сказать: «Не используйте это, если есть еще один результат».

Мне нужна полная противоположность ConditionalOnMissingBean. Теперь я полагаю, что мог бы использовать эту аннотацию и перечислить все возможные классы подключаемых модулей, которые я мог бы использовать, но это плохая форма, поскольку я не хочу перекомпилировать / повторно развертывать каждый раз, когда я создаю новый подключаемый модуль безопасности.

Есть ли аннотация типа UseThisIfNoOtherBeanExists?

На самом деле, чего я действительно хочу, так это чтобы у меня были ВСЕ мои средства безопасности, скажем, SecurityConfiguration, аннотированные с помощью @Configuration, и чтобы весь класс был заменен чем-то еще, если это возможно.

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

mrkernelpanic 12.03.2018 15:39

«Мне нужна полная противоположность ConditionalOnMissingBean». ... "Есть ли аннотация типа UseThisIfNoOtherBeanExists?" Да, это @ConditionalOnMissingBean, т.е. «загружать только в том случае, если еще нет другого bean-компонента этого типа».

Brian 12.03.2018 15:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
281
1

Ответы 1

Похоже, вы ищете ConditionalOnMissingBean. Аннотированный этим bean-компонент будет использоваться только в том случае, если bean-компонент этого типа еще не зарегистрирован в фабрике bean-компонентов.

Если вас это почему-то не устраивает, у вас есть варианты. Вы можете просмотреть весь пакет org.springframework.boot.autoconfigure.condition, чтобы увидеть, есть ли там что-то, что лучше всего подходит для вашего варианта использования. В качестве альтернативы вы также можете использовать @Conditional и вручную создать условие на основе среды, в которой работает ваше приложение.

Другие вопросы по теме