我有一个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()添加标头。

这在拦截器中是否有效?我认为它应该是,但它不起作用。

此致 达斯汀

有帮助吗?

解决方案 2

好吧,我想通了......有点......

事实证明,Jetty和Tomcat存在同样的问题(想念MAYBE这是一个容器问题)。所以......

调试以确保响应对象包含正确的标头值,直到Spring返回容器。结果:HttpServletResponse实例仍具有正确的标头值。

我在我的代码中发现我正在调用 response.setContentLength()之前我正在对标题做任何事情。如果我发表评论,一切正常。

所以,剩下的谜团是,为什么调用 response.setContentLength()将事情锁定并且不允许任何标题被修改?我不认为内容正文与其他标题有任何关系。

其他提示

您是否尝试过在preHandle方法中设置标题?如果这不起作用,请尝试为容器编写过滤器并在其中设置标题。

我遇到了类似的问题,当我在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>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top