クラス ForwardedHeaderFilter

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

public class ForwardedHeaderFilter extends OncePerRequestFilter
"Forwarded" および "X-Forwarded-*" ヘッダーから値を抽出し、リクエストとレスポンスをラップし、次の方法でクライアントが発信したプロトコルとアドレスを反映させます。

アプリケーションは、ヘッダーが意図したとおりにプロキシによって追加されたのか、悪意のあるクライアントによって追加されたのかを知ることができないため、転送されたヘッダーにはセキュリティ上の考慮事項があります。これが、信頼の境界にあるプロキシを構成して、外部からの信頼できない転送ヘッダーを削除する必要がある理由です。

ForwardedHeaderFilter を removeOnly で構成することもできます。その場合、ヘッダーは削除されますが、使用されません。

導入:
4.3
作成者:
Rossen Stoyanchev, Edd ú Mel é ndez, Rob Winch, Brian Clozel
関連事項:
  • コンストラクターの詳細

    • ForwardedHeaderFilter

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

    • setRemoveOnly

      public void setRemoveOnly(boolean removeOnly)
      "Forwarded" または "X-Forwarded-*" ヘッダーのみが削除され、それらの情報は無視されるモードを有効にします。
      パラメーター:
      removeOnly - 転送されたヘッダーを破棄して無視するかどうか
      導入:
      4.3.9
    • setRelativeRedirects

      public void setRelativeRedirects(boolean relativeRedirects)
      このプロパティを使用して、RelativeRedirectFilter に従って相対リダイレクトを有効にし、そのフィルターと同じレスポンスラッパーを使用するか、両方が構成されている場合は、一方のみがラップします。

      デフォルトでは、このプロパティが false に設定されている場合、HttpServletResponse.sendRedirect(String)EE への呼び出しは、転送されたヘッダーも考慮に入れて、相対 URL を絶対 URL に変更するためにオーバーライドされます。

      パラメーター:
      relativeRedirects - 相対リダイレクトを使用するかどうか
      導入:
      4.3.10
    • shouldNotFilter

      protected boolean shouldNotFilter(HttpServletRequestEE request)
      クラスからコピーされた説明: OncePerRequestFilter
      カスタムフィルタリングコントロールのサブクラスでオーバーライドでき、指定されたリクエストのフィルタリングを回避するために true を返します。

      デフォルトの実装は、常に false を返します。

      オーバーライド:
      クラス OncePerRequestFiltershouldNotFilter 
      パラメーター:
      request - 現在の HTTP リクエスト
      戻り値:
      指定されたリクエストを濾過するべきでありません
    • shouldNotFilterAsyncDispatch

      protected boolean shouldNotFilterAsyncDispatch()
      クラスからコピーされた説明: OncePerRequestFilter
      ディスパッチャー型 jakarta.servlet.DispatcherType.ASYNC は、1 つのリクエストの過程で複数のスレッドでフィルターを呼び出すことができることを意味します。一部のフィルターは最初のスレッドをフィルタリングするだけで済みます (例: リクエスト 折り返し)。その他のフィルターは、たとえばスレッドローカルを設定するため、または最後に最終処理を実行するために、追加のスレッドごとに少なくとも 1 回呼び出す必要があります。

      フィルターは、web.xml を介して特定のディスパッチャー型を処理するように、または ServletContext を介して Java で処理するようにマップできますが、サーブレットコンテナーはディスパッチャー型に関して異なるデフォルトを適用する場合があることに注意してください。このフラグは、フィルターの設計意図を強制します。

      デフォルトの戻り値は "true" です。これは、後続の非同期ディスパッチ中にフィルターが呼び出されないことを意味します。"false" の場合、フィルターは非同期ディスパッチ中に呼び出され、単一スレッド内のリクエスト中に 1 回だけ呼び出されるという同じ保証があります。

      オーバーライド:
      クラス OncePerRequestFiltershouldNotFilterAsyncDispatch 
    • shouldNotFilterErrorDispatch

      protected boolean shouldNotFilterErrorDispatch()
      クラスからコピーされた説明: OncePerRequestFilter
      サーブレットコンテナーが web.xml にマッピングされたときなどのエラーディスパッチをフィルタリングするかどうか。デフォルトの戻り値は "true" です。これは、エラーディスパッチの場合にフィルターが呼び出されないことを意味します。
      オーバーライド:
      クラス OncePerRequestFiltershouldNotFilterErrorDispatch 
    • 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
    • formatRequest

      protected StringSE formatRequest(HttpServletRequestEE request)
      HTTP メソッドと URL を含むロギング目的でリクエストをフォーマットします。
      パラメーター:
      request - フォーマットのリクエスト
      戻り値:
      表示する文字列、決して空または null
    • doFilterNestedErrorDispatch

      protected void doFilterNestedErrorDispatch(HttpServletRequestEE request, HttpServletResponseEE response, FilterChainEE filterChain) throws ServletExceptionEE, IOExceptionSE
      クラスからコピーされた説明: OncePerRequestFilter
      通常、ERROR ディスパッチは、REQUEST ディスパッチが完了した後に発生し、フィルターチェーンが新たに開始されます。ただし、一部のサーバーでは、ERROR ディスパッチが REQUEST ディスパッチ内にネストされている場合があります。レスポンスで sendError を呼び出した結果。その場合、同じスレッドのチェーンフィルターにまだありますが、リクエストとレスポンスは元のラップされていないものに切り替えられています。

      サブクラスはこのメソッドを使用して、ネストされた ERROR ディスパッチをフィルタリングし、リクエストまたはレスポンスにラップを再適用できます。ThreadLocal コンテキスト(存在する場合)は、フィルターチェーン内に入れ子になっているため、まだアクティブである必要があります。

      オーバーライド:
      クラス OncePerRequestFilterdoFilterNestedErrorDispatch 
      例外:
      ServletExceptionEE
      IOExceptionSE