2012-04-10 79 views
0

我正在使用RichFaces,並遇到fileUpload flash組件+ IE + SSL的問題。根據我所做的研究,我需要更改「Pragma」和「Cache-Control」HTTP標頭。如何更改特定內容類型的HTTP標頭?

如何更改這些標頭僅適用於Flash內容? 我嘗試使用Servlet過濾器。這是doFilter()方法:

chain.doFilter(request, response); 
HttpServletResponse resp = (HttpServletResponse) response; 
if (resp.getContentType() != null && resp.getContentType().contains("flash")) { // application/x-shockwave-flash 
resp.setHeader("Pragma", ""); 
} 

正在執行的過濾器,報頭被改變,但我與螢火蟲檢查,首標是回「無緩存」。這是我在web.xml中的最後一個過濾器,但正如其他某個過濾器將標題放回來一樣。

我也在使用JBoss 5. 我該如何解決這個問題?謝謝。

回答

1

嘗試執行指令以在doFilter()之前設置標題。通過這種方式:

HttpServletResponse resp = (HttpServletResponse) response; 
if (// .. your test) { 
    resp.setHeader("Pragma", ""); 
} 
chain.doFilter(request, response); 

因爲服務器開始向客戶端發送數據時無法設置頭字段。

當然,通過這種方式,您必須找到另一種方法來檢查請求的資源的contentType。也許你可以根據HttpServletRequest.getRequestURI()和這個值的文件擴展名進行檢查。

+0

我以爲我會在**服務器處理請求後更改標頭**,但在發送響應之前**。我首先測試了爲所有響應設置標題,但其中一些(不包括閃光)保持了變化。 – Carcamano 2012-04-11 13:32:11

+0

否'doFilter'中的代碼已經寫入客戶端。有時候如果你有一個很大的響應緩衝區,它可以工作,但是當你超過這個限制時,它開始發送數據。所以你不能確定。 – dash1e 2012-04-11 13:38:16

+1

您的建議奏效。但是我從過濾器中刪除了if條件並將「 * .swf」添加到部署描述符中。謝謝。 – Carcamano 2012-04-11 17:15:10