Spring Security поддерживает этот сценарий, используя два разных интерфейса.
AuthenticationFailureHandler
Spring Security использует этот API, чтобы определить, как бороться с ошибкой аутентификации (например, плохие кредиты). Очень часто хочется перенаправить обратно на страницу входа в систему, поэтому это происходит по умолчанию. Тем не менее, вы можете настроить его с помощью
http
.formLogin()
.failureUrl(myUrl)
или
http
.formLogin()
.failureHandler(myFailureHandler)
для более сложных нужд.
Скажите, что пользователь вошел в систему, однако он запрашивает защищенный ресурс, к которому у него нет доступа.
По умолчанию Spring Security возвращает 403, но его также можно настроить как страницу отказа в доступе:
http
.exceptionHandling()
.accessDeniedPage(myAccessDeniedPage)
или
http
.exceptionHandling()
.accessDeniedHandler(myAccessDeniedHandler)
для более сложных нужд.
Ваш AuthenticationProvider
должен просто сосредоточиться на аутентификации пользователя - вы можете бросить AuthenticationException
, чтобы указать на сбой. UsernamePasswordAuthenticationFilter
позаботится о подборе URL-адреса ошибки, а ExceptionTranslationFilter
- странице отказа в доступе.