Конфигурация Java Spring Security - настраиваемый AuthenticationProvider и UserDetailsService

Я использую конфигурацию java для настройки Spring Security, и я настроил AuthenticationProvider и настроил UserDetailsService, чтобы добавить дополнительное поле входа после http://forum.spring.io/forum/spring-projects/security/95715-extra-login-fields

Мне сложно добавить оба настроенных класса в платформу Spring Security с помощью конфигурации java. Как описывает java-документ AuthenticationProvider # authenticationProvider:

Добавьте аутентификацию на основе переданного настраиваемого AuthenticationProvider. Поскольку реализация AuthenticationProvider неизвестна, все настройки должны выполняться извне, и AuthenticationManagerBuilder возвращается немедленно.

Этот метод НЕ гарантирует, что UserDetailsService доступен для метода getDefaultUserDetailsService ().

Итак, мой вопрос: каков подход к установке UserDetailsService в этом случае?


person wgui    schedule 13.08.2014    source источник


Ответы (1)


Вот пример настроенного AuthenticationProvider и настроенного UserDetailsService:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(customAuthenticationProvider());
    }

    @Bean
    AuthenticationProvider customAuthenticationProvider() {
        CustomAuthenticationProvider impl = new CustomAuthenticationProvider();
        impl.setUserDetailsService(customUserDetailsService());
        /* other properties etc */
        return impl ;
    }

    @Bean   
    UserDetailsService customUserDetailsService() {
        /* custom UserDetailsService code here */
    }
}
person Ritesh    schedule 14.08.2014
comment
Я заметил, что вы инициализируете свои customAuthenticationProvider и customUserDetailsService вручную, не лучше ли @Autowired их напрямую? - person ; 05.05.2015
comment
@Autowired используется в классе @Configuration, когда вы подключаете внешние компоненты. В этом коде bean-компоненты customAuthenticationProvider и customUserDetailsService объявлены в одном классе, поэтому для @Autowired нет варианта использования. Также обратите внимание, что AuthenticationManagerBuilder объявлен где-то еще, поэтому можно использовать @Autowired. - person Ritesh; 05.05.2015
comment
impl.setUserDetailsService (customUserDetailsService ()); // это не сработает, - интерфейс AuthenticationProvider не имеет метода setUserDetailsService (). - person user3791111; 04.05.2017
comment
Поскольку это настраиваемая реализация AuthenticationProvider, вы можете добавить этот метод (в конце концов, любому провайдеру аутентификации потребуется механизм для загрузки сведений о пользователе). См. Реализации AuthenticationProvider, такие как DaoAuthenticationProvider, в котором есть метод setUserDetailsService. - person Ritesh; 05.05.2017