我有一个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()添加标头。
这在拦截器中是否有效?我认为它应该是,但它不起作用。
此致 达斯汀
答案 0 :(得分:1)
您是否尝试过在preHandle方法中设置标题?如果这不起作用,请尝试为容器编写过滤器并在其中设置标题。
答案 1 :(得分:1)
好吧,我想通了......有点......
事实证明,Jetty和Tomcat存在同样的问题(想念MAYBE这是一个容器问题)。所以......
调试以确保响应对象包含正确的标头值,直到Spring返回容器。结果:HttpServletResponse实例仍具有正确的标头值。
我在我的代码中发现,在我使用标题做任何事情之前,我正在调用response.setContentLength()
。如果我发表评论,一切正常。
所以,剩下的谜团是,为什么调用response.setContentLength()
会锁定内容而不允许修改任何标题?我不认为内容正文与其他标题有任何关系。
答案 2 :(得分:0)
我遇到了类似的问题,当我在web.xml中有以下内容时(无法弄清楚原因),它可以正常工作
<filter>
<filter-name>etagFilter</filter-name>
<filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>etagFilter</filter-name>
<servlet-name>myServlet</servlet-name>
</filter-mapping>