2014-10-09 5 views
0

Я новичок в весенней безопасности 3.x, поэтому, может быть, мой вопрос довольно глупый.Весна безопасности 3.x + mvc - обработка исключений

использования: Войти страницы, пользователь вводит неверные данные (например, неправильно Pasword), то необходимо некоторое сообщение об ошибке будет отображаться на странице входа

Сценарий: Обработки входа в конечном итоге в моем клиенте провайдере аутентификации с, например, AuthenticationServiceException. Затем клиент перенаправляется снова на страницу входа в систему

Вопрос: Я установил контроллер @RequestMapping (значение = "login") для действия входа. Я хотел бы знать, что исключение было поднято, и я хочу отобразить некоторый текст (например, exception.getLocalizedMessage()) в действии входа. Как? Как я могу поймать это AuthenticationServiceException, чтобы позволить контроллеру узнать что-то?

Спасибо

+0

Spring Security уже обрабатывает это для вас и предоставляет локализованное сообщение об ошибке. Зачем изобретать его снова? Также вы не хотите точно указывать, что не так (то есть * unknow username * или * неправильный пароль), поскольку это намек на то, что хакеры продолжат работу. Вы хотите иметь общее сообщение об ошибке (например, * неизвестная комбинация имени пользователя и пароля *). –

+0

Как я могу получить к нему доступ? Как я могу реализовать исключение? Где это управляется весной? – squirrelInTheBarel

ответ

0

Когда есть ошибка проверки подлинности, исключение сохраняется в модели, используя имя SPRING_SECURITY_LAST_EXCEPTION. Вы можете отобразить сообщение об исключении на странице входа в систему, следующий пример из вида Velocity:

#if ($SPRING_SECURITY_LAST_EXCEPTION) 
<p class="error">${SPRING_SECURITY_LAST_EXCEPTION.message}</p> 
#end 
+0

Я использую что-то вроде этого: Object lastException = webRequest.getAttribute (WebAttributes.AUTHENTICATION_EXCEPTION, WebRequest.SCOPE_SESSION); Что действительно глупо. Исключение остается в сеансе, даже если вы сделали обновление при ошибке страницы входа в систему и т. Д. – squirrelInTheBarel

+0

@squirrelInTheBarel не стесняйтесь публиковать свой подход как свой собственный ответ. – holmis83

0

Я использую следующие в контроллере:

Object lastException = webRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, WebRequest.SCOPE_SESSION); 
if (lastException != null) { 
    .... 
} 

Тогда у меня есть доступ ко последнего исключения. Но вся эта концепция немного глупа, например. это исключение остается в сеансе, поэтому оно отображается каждый раз, когда пользователь делает обновление. Должно быть лучшее решение .....

Смежные вопросы