0

呼び出した後、応答オブジェクトにヘッダーを設定しようとしています

chain.doFilter()

ただし、ヘッダーは設定されません。chain.doFilter()を呼び出した後、コントロールがdoFilter()メソッドに戻ることはありますか?

4

2 に答える 2

1

ただし、ヘッダーは設定されません。

これは、応答がすでにコミットされている場合に発生する可能性があります(読み取り:すべてのヘッダーを含む応答の最初の部分がすでにクライアントに送信されている場合。これは戻り値のないポイントです)。少し正気のservletcontainerはIllegalStateException、すでにコミットされた応答にヘッダーを設定しようとすると、をスローします。これはサーバーログに表示されます。あなたはそれらを読んだことがありますか?


chain.doFilter()を呼び出した後、コントロールがdoFilter()メソッドに戻ることはありますか?

ブレークポイントまたはsysout/logger行を配置することで、自分で簡単に確認できます。しかし、確かに、コントロールは通常のJavaの方法に戻り、呼び出しからのキャッチされない例外がない限り、残りの行が実行されdoFilter()ます。


具体的な機能要件に戻ると、応答がコミットされる前にヘッダーが設定されるようにコードを書き直す必要があります。具体的な機能要件はまったく詳しく説明されていないため、この回答でいくつかのヒントやキックオフの例を示すことはできません。最も簡単な方法は、を呼び出すdoFilter()にヘッダーを設定することです。

于 2012-10-17T18:40:57.230 に答える
0

リクエストフィルターは次のことができます。

  • セキュリティチェックを実行する
  • リクエストのヘッダーまたは本文を再フォーマットします
  • リクエストの監査またはログ

応答フィルターは次のことができます。

  • 応答ストリームを圧縮します
  • 応答ストリームを追加または変更する
  • まったく異なる応答を作成する
于 2015-07-03T07:03:01.557 に答える