2014-06-09 67 views
3

我已經搜索並看到這個問題的帖子,但沒有找到答案如何可能。doFilter後添加回復標題

我想要做什麼是過濾器鏈後添加標題,

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
HttpServletResponse httpResp = (HttpServletResponse) response; 

try { 
HttpServletResponseWrapper bufferedResponse = new  HttpServletResponseWrapper (httpResp); 

chain.doFilter(request, bufferedResponse); 

} finally { 
// header added at this line is not actually being added.   
bufferedResponse.setHeader("ADD A HEADER: ", "HEADER"); 
}          
} 

多個帖子所說,可以通過使用HttpServletResponseWrapper但它不是爲我工作,任何人都可以幫助我在此。

回答

4

由於此時HTTP頭已全部寫入客戶端,所以在提交響應之後,您無法添加頭(可以,但可以但不會產生任何影響)。

您有三種選擇。

  1. 寫你的頭,你撥打的doFilter()之前
  2. 確保(大的緩衝區,小召,沒有調用刷新()等),您嘗試添加你頭之前的響應沒有提交。
  3. 包裝在做過濾器方法和緩衝區之前,然後在包裝器中的整個響應主體,然後添加您的標題,然後從緩衝區寫出響應正文。
+0

是的,我試圖實現選項2或3你有建議。但尚未成功。你有沒有任何示例代碼。 [link] http://www.wetfeetblog.com/servlet-filer-to-log-request-and-response-details-and-payload/431 [link]使用以下方法緩衝響應。我正在使用響應標題,但在如何添加標題上掙扎 – Kishore