Spring-处理后为每个请求修改标头(在postHandle中)
我想做的是,在处理完请求后,向响应中添加新的标头。我需要检查已处理的HttpStatus
代码(在我的情况下是未经授权的401)并添加新的标头。我知道Spring有拦截器,但是响应不能按照文档中所述进行修改:
请注意,HandlerInterceptor的postHandle方法并不总是非常适合与@ResponseBody和ResponseEntity方法一起使用。在这种情况下,HttpMessageConverter会在调用postHandle之前写入并提交响应,这使得无法更改响应,例如添加标头。相反,应用程序可以实现ResponseBodyAdvice并将其声明为@ControllerAdvice
bean或直接在RequestMappingHandlerAdapter上对其进行配置。
好吧,我实现了ResponseBodyAdvice
。是的,它允许 修改,但是我无法修改标题,因为事件找不到从控制器返回的状态代码。
使用servlet过滤器的另一种选择也不成功。filterChain.doFilter(servletRequest,
servletResponse);通话后,我需要添加标题。但这又不会修改标头值。有没有办法完成这个简单的任务?
回答:
听起来好像您在使用servlet过滤器在正确的轨道上,您可能需要做的是将servlet响应对象包装为一个对象,该对象可以检测何时设置了401状态代码并在那时添加您的自定义标头:
HttpServletResponse wrappedResponse = new HttpServletResponseWrapper(response) { public void setStatus(int code) {
super.setStatus(code);
if(code == 401) handle401();
}
// three similar methods for the other setStatus and the two
// versions of sendError
private void handle401() {
this.addHeader(...);
}
};
filterChain.doFilter(request, wrappedResponse);
以上是 Spring-处理后为每个请求修改标头(在postHandle中) 的全部内容, 来源链接: utcz.com/qa/422965.html