2008-10-29 198 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>