Подтвердить что ты не робот

Настройка AccessDeniedHandler для обработки недопустимого токена csrf

Я ссылаюсь на Spring Документацию по безопасности о настройке защиты CSRF:

Вместо этого по умолчанию Spring Защита Защита CSRF приведет к Доступ HTTP 403 запрещен. Это можно настроить, настроив AccessDeniedHandler для обработки InvalidCsrfTokenException по-разному.

см. здесь: http://docs.spring.io/spring-security/site/docs/3.2.6.RELEASE/reference/htmlsingle/#csrf-configure

Я не уверен, как настроить обработчик, чтобы иметь дело с недопустимым токеном CSRF.

private AccessDeniedHandler accessDeniedHandler() {
        return new AccessDeniedHandler() {
            @Override
            public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
                // TODO: deal with InvalidCsrfTokenException
                response.setStatus(HttpStatus.FORBIDDEN.value());
            }
        };
    }

Я использую angular на стороне клиента для связи с моим приложением Spring в REST.

Каков наилучший способ борьбы с устаревшими/недопустимыми токенами CSRF?

Должен ли я использовать AccessDeniedHandler, чтобы добавить пользовательский заголовок ответа HTTP, указывающий, что токен CSRF недействителен и обрабатывает это на стороне клиента? Но как я могу запросить новый токен CSRF из JS?

Есть ли другой и лучший способ продолжить, и как я могу

обрабатывать InvalidCsrfTokenException по-другому

?

4b9b3361

Ответ 1

Если вы предоставите подробное сообщение об ошибке, используйте AccessDeniedHandler. Обработчик управляет InvalidCsrfTokenException и MissingCsrfTokenException

И почему вы хотите сгенерировать токен csrf? Каждый раз, когда вы запрашиваете сайт spring, он будет генерировать его для вас. Но если вы действительно хотите реализовать собственную стратегию csrf, посмотрите CsrfAuthenticationStrategy

Spring каждый раз вызывайте этот класс в SessionManagementFilter