Spring MVC的 - 添加自定义页眉CSRF所有HTTP响应(Spring MVC - Add

2019-10-29 12:46发布

在我的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在控制器执行之前invocated(而不是之后)

我真的想深入了解如何应对这些拦截器那么可能有人解释我用一个例子,我可以操纵的最佳场所HttpServletResponse ,为了实现我的目标?

Answer 1:

发现我的其他线程的解决方案在这里一切都abount使用ResponseBodyAdvice为了达到我的目标。



文章来源: Spring MVC - Add custom CSRF Header to all HTTP responses