2017-02-09 23 views
0

Я использовал поставщиков аутентификации в Spring Security. У меня есть два провайдера аутентификации: LocalAuthenticationProvider и RemoteAuthenticationProvider. Поток аутентификации является то, чтоSpring Security вызывает другого провайдера аутентификации, даже первый провайдер не работает

  1. приложение проверяет учетные данные в локальной БД
  2. если локальная аутентификация прошла успешно, необходимо вызвать RESTful веб-службы для проверки подлинности верительных данных.
  3. если локальная аутентификация не удалась, предположим, что ошибка не выполнена и ответ 401.
@Override 
protected void configure(
    AuthenticationManagerBuilder auth) throws Exception { 
    auth.authenticationProvider(localProvider).authenticationProvider(remoteProvider); 
} 

LocalAuthenticationProvider бросает AuthenticationException, если полномочие не удалось. Если учетные данные: passed, он возвращает null.

Моя проблема связана с Spring Security Framework RemoteAuthenticationProvider даже LocalAuthenticationProvider is failed.

Когда я удалить RemoteAuthenticationProvider из AuthenticationManagerBuilder списка поставщиков, он работает даже LocalAuthenticationProvider является failed.

Я хотел бы знать, как я могу достичь этого потока аутентификации. Эти два поставщика зависят друг от друга.

ответ

1

Глядя на Javadoc для ProviderManager, казалось бы, что если ваш первый поставщик должен был бросить AccountStatusException, то аутентификация не будет переходить ко второму провайдеру:

http://docs.spring.io/autorepo/docs/spring-security/4.0.3.RELEASE/apidocs/org/springframework/security/authentication/ProviderManager.html

Исключение из этого процесса [ вызывается провайдером, пока один из них не отправляется], когда поставщик выдает AccountStatusException, , и в этом случае дальнейшие поставщики в списке не будут запрошены.