2015-10-22 10 views
4

Обычно, когда страница остается до окончания сеанса, и я пытаюсь отправить POST-действие, токен CSRF, созданный Spring Security, не будет соответствовать ожидаемому значению сервера. Ошибка в этом случае является ожидаемым результатом.Настройка страницы ошибки CSRF в Spring Security

Однако, я всегда получаю ошибку Tomcat 403 по умолчанию, которая довольно уродливая. Это вызвано ошибкой 403, созданной фильтром безопасности.

Однако я хотел бы перехватить конкретную ошибку CSRF для выполнения пользовательского действия. А именно, следующий не будет работать, потому что ошибка возникает гораздо раньше, чем трубопровод MVC

@ExceptionHandler(CsrfException.class) 
public String exception(CsrfException ex) 
{ 
    log.error(ex.getMessage(), ex); 

    return "redirect:/index.jsp"; 
} 

Перенаправление на страницу индекса (или любой другой), кажется, хорошее решение. Как я могу перехватить неверную ошибку токена CSRF и настроить ответ сервера?

+0

500 обычно означает неперехваченное исключение. Вы можете найти стек? – holmis83

+0

К сожалению, я имел в виду 403. Я буду работать над текущим ответом –

ответ

3

Для проверки безопасности CSRF Spring Security используется CsrfFilter. В случае отсутствия или недействительного маркера он использует AccessDeniedHandler

if (missingToken) { 
       accessDeniedHandler.handle(request, response, 
         new MissingCsrfTokenException(actualToken)); 
      } 
      else { 
       accessDeniedHandler.handle(request, response, 
         new InvalidCsrfTokenException(csrfToken, actualToken)); 
      } 

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

@Override 
    public void configure(HttpSecurity http) throws Exception { 
    HttpSecurity http = http.exceptionHandling().accessDeniedHandler(myAccessDeniedHandler); 
} 
+0

Я сделаю это в XML (нужно найти, где его установить), в любом случае это приводит к правильному пути –

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