クラス ShallowEtagHeaderFilter

実装されたすべてのインターフェース:
FilterEEAwareBeanNameAwareDisposableBeanInitializingBeanEnvironmentAwareEnvironmentCapableServletContextAware

public class ShallowEtagHeaderFilter extends OncePerRequestFilter
レスポンスの内容に基づいて ETag 値を生成する FilterEE。この ETag は、リクエストの If-None-Match ヘッダーと比較されます。これらのヘッダーが等しい場合、レスポンスコンテンツは送信されず、代わりに 304 "Not Modified" ステータスが送信されます。

ETag はレスポンスコンテンツに基づいているため、レスポンス(View など)は引き続きレンダリングされます。そのため、このフィルターは帯域幅のみを節約し、サーバーのパフォーマンスは節約しません。

状態を変更する HTTP メソッドと、If-Match や If-Unmodified-Since などのその他の HTTP 条件付きリクエストヘッダーは、このフィルターの範囲外です。代わりに ServletWebRequest.checkNotModified(String, long) の使用を検討してください。

導入:
3.0
作成者:
Arjen Poutsma, Rossen Stoyanchev, Brian Clozel, Juergen Hoeller
  • コンストラクターの詳細

    • ShallowEtagHeaderFilter

      public ShallowEtagHeaderFilter()
  • メソッドの詳細

    • setWriteWeakETag

      public void setWriteWeakETag(boolean writeWeakETag)
      RFC 7232 に従って、レスポンスに書き込まれる ETag 値を脆弱にするかどうかを設定します。

      web.xml のフィルター定義のパラメーター名 "writeWeakETag" に <init-param> を使用して構成する必要があります。

      導入:
      4.3
      関連事項:
    • isWriteWeakETag

      public boolean isWriteWeakETag()
      RFC 7232 に従って、レスポンスに書き込まれた ETag 値を脆弱にする必要があるかどうかを返します。
      導入:
      4.3
    • shouldNotFilterAsyncDispatch

      protected boolean shouldNotFilterAsyncDispatch()
      デフォルト値は false であるため、フィルターは、最後に非同期にディスパッチされたスレッドまで ETag の生成を遅らせることができます。
      オーバーライド:
      クラス OncePerRequestFiltershouldNotFilterAsyncDispatch 
    • doFilterInternal

      protected void doFilterInternal(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE
      クラスからコピーされた説明: OncePerRequestFilter
      doFilter と同じ契約ですが、単一のリクエストスレッド内のリクエストごとに 1 回だけ呼び出されることが保証されています。詳細については、OncePerRequestFilter.shouldNotFilterAsyncDispatch() を参照してください。

      デフォルトの ServletRequest および ServletResponse の代わりに、HttpServletRequest および HttpServletResponse 引数を提供します。

      次で指定:
      クラス OncePerRequestFilterdoFilterInternal 
      例外:
      ServletExceptionEE
      IOExceptionSE
    • isEligibleForEtag

      protected boolean isEligibleForEtag(HttpServletRequestEE request, HttpServletResponseEE response, int responseStatusCode, InputStreamSE inputStream)
      特定のリクエストとレスポンスの交換に対して ETag を計算する必要があるかどうか。次のすべてが一致する場合、デフォルトでは、これは true です。
      • レスポンスはコミットされていません。
      • レスポンスステータスコードは 2xx シリーズです。
      • リクエストメソッドは GET です。
      • レスポンス Cache-Control ヘッダーに "no-store" が含まれていない(またはまったく存在しない)。
      パラメーター:
      request - HTTP リクエスト
      response - HTTP レスポンス
      responseStatusCode - HTTP レスポンスステータスコード
      inputStream - レスポンス本文
      戻り値:
      ETag 生成に適格な場合は true、それ以外の場合は false 
    • generateETagHeaderValue

      protected StringSE generateETagHeaderValue(InputStreamSE inputStream, boolean isWeak) throws IOExceptionSE
      指定されたレスポンス本文のバイト配列から ETag ヘッダー値を生成します。

      デフォルトの実装では、MD5 ハッシュが生成されます。

      パラメーター:
      inputStream - InputStream としてのレスポンス本文
      isWeak - 生成された ETag が弱いかどうか
      戻り値:
      ETag ヘッダー値
      例外:
      IOExceptionSE
      関連事項:
    • disableContentCaching

      public static void disableContentCaching(ServletRequestEE request)
      このメソッドは、ShallowEtagHeaderFilter のコンテンツキャッシングレスポンスラッパーを抑制するために使用できます。これの主な理由は、キャッシュされず、eTag を必要としないストリーミングシナリオです。

      注意 : キャッシュなしでレスポンスコンテンツ全体を書き込むには、レスポンスが書き込まれる前にこのメソッドを呼び出す必要があります。

      導入:
      4.2