繁体   English   中英

Spring MVC-将自定义CSRF标头添加到所有HTTP响应

[英]Spring MVC - Add custom CSRF Header to all HTTP responses

在我的Spring MVC应用程序中,我想在带注释的控制器方法上实现一种CSRF标头。

我已经在HandlerInterceptorAdapter.preHandle方法上实现了100%正常工作的客户端CSRF标头解析器,并且我曾经尝试在同一处理程序中在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);
}

这个线程中有人告诉我,我不能使用该方法,最好使用Filter,但是我注意到在doFilter ...

  1. 无法将标头设置为响应(或至少我找不到方法)
  2. 在控制器执行之前(而不是之后)调用doFilter方法。

我真的很想深入了解如何处理这些拦截器,因此有人可以通过示例向我解释我可以操纵HttpServletResponse来实现我的目标的最佳位置吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM