Spring MVC - 添加自定义 CSRF Header 到所有 HTTP 响应
Spring MVC - Add custom CSRF Header to all HTTP responses
在我的 Spring MVC 应用程序中,我想在带注释的控制器方法上实现一种 CSRF header。
我已经在 HandlerInterceptorAdapter.preHandle
方法上实现了 100% 工作的客户端 CSRF header 解析器,我曾经尝试在同一个处理程序中为响应生成 header在 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
...
- Cannot set headers to the response (or at least I could not find a way)
- The method
doFilter
is invocated before the controller execution (and not after)
我真的很想深入了解如何处理这些拦截器,所以有人可以通过示例向我解释我可以操纵 HttpServletResponse
以实现我的目标的最佳位置吗?
在我的另一个线程上找到了解决方案 都是关于使用 ResponseBodyAdvice
来实现我的目标。
在我的 Spring MVC 应用程序中,我想在带注释的控制器方法上实现一种 CSRF header。
我已经在 HandlerInterceptorAdapter.preHandle
方法上实现了 100% 工作的客户端 CSRF header 解析器,我曾经尝试在同一个处理程序中为响应生成 header在 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
...
- Cannot set headers to the response (or at least I could not find a way)
- The method
doFilter
is invocated before the controller execution (and not after)
我真的很想深入了解如何处理这些拦截器,所以有人可以通过示例向我解释我可以操纵 HttpServletResponse
以实现我的目标的最佳位置吗?
在我的另一个线程上找到了解决方案 ResponseBodyAdvice
来实现我的目标。