2008-10-29 56 views
3

我有一个Spring拦截器,它试图在postHandle()方法中添加一个HTTP头文件。在Spring拦截器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()一起添加。

这甚至在拦截器中有效吗?我想它会是,但它不工作。

问候, 达斯汀

回答

1

嗯,我想它了...有点儿...

事实证明,与码头和Tomcat同样的问题(也许想通这是一个容器的问题)。所以...

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

我在我的代码中找到我正在调用response.setContentLength()之前我正在做任何与标题。如果我将它评论出来,一切正常。

所以,剩下的奥秘是,为什么叫response.setContentLength()锁定了东西并且不允许修改任何头文件?我认为内容主体与其他标题没有任何关系。

1

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

+1

好了,我不能这样做在preHandle方法,因为我需要设置的头是基于servlet处理结果的,所以它必须在postHandle方法中完成。 – DustinB 2008-10-29 14:26:38

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>