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

回到顶部