在我的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
在控制器执行之前invocated(而不是之后)
我真的想深入了解如何应对这些拦截器那么可能有人解释我用一个例子,我可以操纵的最佳场所HttpServletResponse
,为了实现我的目标?