Вывод ошибки аутентификации в Spring Security

 
 
 
Сообщения:282
Использую Spring Security 4.2.3.RELEASE с xml-конфигурацией в Spring MVC веб-приложении.

В некоторых случаях аутентификация пользователя может не проходить по разным причинам: не верные имя/пароль, пользователь заблокирован, не активен и т.д. Если ошибки аутентификации самому не обрабатывать, то Spring просто редиректит на URL, который указывается в параметре authentication-failure-url.

Вопрос: как выцепить конкретную причину ошибки в соответствующем обработчике URL'а в контроллере? Нужно это для того, чтобы не выдавать пользователю одно и то же предупреждение "Не верные имя пользователя и/или пароль" при различных ошибках, а выдавать истинную причину неудачи.

Пока нашёл решение, которое работает, это использование обработчика AuthenticationFailureHandler. В методе AuthenticationFailureHandler#onAuthenticationFailure делаю следующее:
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttServletResponse response,
            AuthenticationException exception) throws IOException, ServletException {

    response.sendRedirect("login-error?cause=" + exception.getClass().getSimpleName());
}


То есть, в случае ошибки происходи редирект по URL'у обработки ошибки, куда ещё добавляется имя класса ошибки. УРЛ при этом выглядит примерно так:

.../login-error?cause=DisabledException.

Потом в контроллере по параметру "cause" строится нужное сообщение и передаётся через модель на вьюшку.

Насколько это вообще нормальное решение, может есть какой-нибудь более элегантный путь? ☺️

"Любая техническая система должна быть идиотоустойчивой" (с) один из университетских преподов
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет