2012-04-10 13 views
0

RichFacesを使用していて、fileUploadフラッシュコンポーネント+ IE + SSLに問題があります。私が行った研究によると、 "Pragma"と "Cache-Control" HTTPヘッダーを変更する必要があります。特定のコンテンツタイプのHTTPヘッダーを変更するにはどうすればよいですか?

これらのヘッダーはどのように変更できますか? 私はサーブレットフィルタを使ってみました。ヘッダは、「キャッシュなし」に戻って、

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

フィルタが実行されて、ヘッダが変更されて、その後私は放火犯に確認:これはdoFilter()方法です。これは私の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

+0

'doFilter'のコードは、すでにクライアントに書き込んでいません。場合によっては、応答のための大きなバッファーがあれば動作しますが、この制限を超えるとデータの送信が開始されます。だからあなたは確信が持てません。 – dash1e

+1

あなたの提案がうまくいった。しかし、フィルタからif条件を削除し、デプロイメント記述子に '' * .swf ''を追加しました。ありがとうございました。 – Carcamano