Как Spring Безопасность добавить/настроить AuthenticationManagerBuilder?

Я работаю над Spring конфигурацией безопасности на основе Java.

Я создал свой собственный MyAuthenticationProvider, который я хочу зарегистрировать в ProviderManager (единственный экземпляр AuthenticationManager).

Я обнаружил, что ProviderManager имеет список поставщиков, которым я могу зарегистрировать свой сингл MyAuthenticationProvider.

Вот часть моей Конфигурации:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(MyAuthenticationProvider);
    }
}

Я обнаружил, что AuthenticationManagerBuilder имеет parentAuthenticationManager, defaultUserDetailsService и многие другие поля.

Мои вопросы:

  • Где эта аннотация @Autowired, добавляющая AuthenticationManagerBuilder auth from? Является ли AuthenticationManagerBuilder уже созданным в контексте приложения?
  • Каким будет состояние по умолчанию AuthenticationManagerBuilder, которое вводится? По умолчанию я хочу сказать, что в AuthenticationManagerBuilder? уже есть теги
parentAuthenticationManager, authenticationProvider Если я добавляю auth.authenticationProvider(MyAuthenticationProvider), значит ли это, что я добавляю еще одного провайдера в AuthenticationManagerBuilder?

Что это значит? Взято из Spring Документация

Имя метода configureGlobal не имеет значения. Однако это важно только настроить AuthenticationManagerBuilder в классе аннотированный с помощью @EnableWebSecurity, @EnableWebMvcSecurity, @EnableGlobalMethodSecurity, или @EnableGlobalAuthentication. дела в противном случае непредсказуемые результаты.

Ответ 1

Ответа на этот вопрос для 3:

Да. Код AuthenticationManagerBuilder добавляет вашего провайдера:

public AuthenticationManagerBuilder authenticationProvider(AuthenticationProvider authenticationProvider) {
    this.authenticationProviders.add(authenticationProvider);
    return this;
}

Ответ на 4 прост:

Это означает, что, если у вас есть одна из этих аннотаций, вы можете назвать свой метод по своему усмотрению:

@Configuration
@EnableWebSecurity  //or @EnableWebMvcSecurity or @EnableGlobalMethodSecurity....
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void myCoolMethodName(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(MyAuthenticationProvider);
    }
}

"В противном случае непредсказуемые результаты"

Если вы сохраняете имя, но не аннотации, оно может не работать.