Spring MVC - добавить пользовательский заголовок CSRF ко всем ответам HTTP - PullRequest
0 голосов
/ 31 августа 2018

В моем приложении Spring MVC я хочу реализовать своего рода заголовок CSRF для методов аннотированных контроллеров.

У меня уже есть 100% работающий клиентский анализатор CSRF-заголовков, реализованный по методу HandlerInterceptorAdapter.preHandle, и я использовал в том же обработчике генерацию заголовков для ответов внутри на afterCompletion, потому что это казалось наиболее подходящим место для меня:

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
        throws Exception {
    if (handler instanceof HandlerMethod) {
        HandlerMethod handlerMethod = (HandlerMethod) handler;

        boolean requestCheck = handlerMethod.getMethodAnnotation(CSRF.class) != null;

        if (requestCheck && handlerMethod.getMethodAnnotation(CSRF.class).response()) {
            response.addHeader(payloadEncryptedHeaderName, SecureUtil.buildCsrfHeader(salt, response));
        }
    }

    super.afterCompletion(request, response, handler, ex);
}

В этой ветке кто-то сказал мне, что я не могу использовать этот метод, и использование фильтра было бы лучшим, но я заметил, что в doFilter ...

  1. Невозможно установить заголовки для ответа (или, по крайней мере, я не смог найти способ)
  2. Метод doFilter вызывается до выполнения контроллера (а не после)

Я действительно хочу глубоко понять, как обращаться с этими перехватчиками, чтобы кто-нибудь объяснил мне на примере лучшее место, где я могу манипулировать HttpServletResponse для достижения своей цели?

1 Ответ

0 голосов
/ 03 сентября 2018

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

...