В моем приложении 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
...
- Невозможно установить заголовки для ответа (или, по крайней мере, я не смог найти способ)
- Метод
doFilter
вызывается до выполнения контроллера (а не после)
Я действительно хочу глубоко понять, как обращаться с этими перехватчиками, чтобы кто-нибудь объяснил мне на примере лучшее место, где я могу манипулировать HttpServletResponse
для достижения своей цели?