在Spring Interceptor postHandle方法中添加HTTP标头
问题内容:
我有一个Spring Interceptor,它尝试在postHandle()方法中添加HTTP标头。
public void postHandle(HttpServletRequest req, HttpServletResponse resp,
Object obj1, ModelAndView mv)
throws Exception {
response.setHeader("SomeHeaderSet", "set");
response.addHeader("SomeHeaderAdd", "added");
}
}
但是,两个标头都没有使用setHeader()或addHeader()添加。
在拦截器中这样做甚至有效吗?我想应该会的,但是那行不通。
问候,达斯汀
问题答案:
好吧,我知道了…金田…
原来,Jetty和Tomcat存在相同的问题(图可能是容器问题)。所以…
进行调试以确保响应对象在Spring返回容器之前一直包含正确的标头值。结果:HttpServletResponse实例仍然具有正确的头值。
我在代码中发现我response.setContentLength()
在使用标头做任何事情之前都在进行调用。如果我将其注释掉,一切正常。
因此,剩下的奥秘是,为什么调用会response.setContentLength()
锁定事物并不允许修改任何标头?我认为内容主体与其他标题无关。