Я настроил пружинную защиту, используя:
@Configuration
@Import(SecurityProblemSupport.class)
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private RestAuthenticationProvider authenticationProvider;
@Autowired
private CustomUserDetailService customUserDetailService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider);
auth.userDetailsService(customUserDetailService);
super.configure(auth);
}
Все работает как положено. Поставщик аутентификации Rest - это Компонент, который реализует AuthenticationProvider:
@Component
public class RestAuthenticationProvider implements AuthenticationProvider {
Проблема заключается в том, что, если я добавлю в путь к классу другой @Component, который расширяет AbstractUserDetailAuthenticationProvider, RestAuthenticationProvider больше не используется; Вместо этого Spring использует одного поставщика по умолчанию, используя UserDetailService, указанный в конфигурации. Нет других ссылок на этот CustomAuthenticationProvider. Это просто в одной упаковке. То же самое происходит, если я использую в конфигурации CustomProvider, а остальное помечено компонентом и больше не используется.
@Component // <- if I remove this, everything works fine.
public class CustomUserAuthenticationProvider extends
AbstractUserDetailsAuthenticationProvider {
Я хотел бы переключиться между AuthenticationProvider (S) на основе некоторой конфигурации. Любая помощь приветствуется.