在我的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);
}
在this线程中,有人告诉我,我不能使用该方法,使用过滤器将是最好的,但我注意到在doFilter
...
- 无法设置标题到响应(或者至少我找不到方法)
- 方法
doFilter
在控制器执行之前被调用(而不是之后)
我真的很想深入了解如何处理这些拦截器所以有人可以用一个例子解释我最好的地方,我可以操纵HttpServletResponse
以实现我的目标吗?
在我的其他线程qazxsw poi上找到了一个解决方案,所有关于使用qazxsw poi以实现我的目标。