Latest web development tutorials

インターセプトフィルタパターン

いくつかの前処理/後処理を行うためのアプリケーションまたは応答でを要求するためのフィルタパターン(インターセプトフィルタパターン)をインターセプト。 フィルタを定義し、リクエストに応じて、ターゲット・アプリケーションの実用化への要求の前に。 フィルタは、次に、適切なハンドラに要求を認証/許可/ロギングやトラッキングの要求を行うことができます。 以下は、このデザインパターンの実体です。

  • (フィルター)フィルター-特定のタスクを実行するための要求要求ハンドラの実行前または後にろ過します。
  • フィルターチェーン(フィルター・チェーン) -複数のフィルタ、および定義された順序でターゲットにこれらのフィルタを実装したフィルタチェーン。
  • ターゲット-ターゲットは、オブジェクト要求ハンドラです。
  • フィルタマネージャ(フィルタマネージャ) -フィルタマネージャのフィルタおよびフィルタチェーン。
  • クライアント(クライアント) - Clientオブジェクトは、要求を送信するために、オブジェクトをターゲットに。

実現

私たちは、クライアントがさまざまなオブジェクトなどのエンティティを表し、ターゲットをれるFilterChain、FilterManager作成します。 AuthenticationFilterDebugFilterは、エンティティフィルタを表します。

InterceptingFilterDemoは、我々はインターセプトフィルターのデザインパターンを実証するために、クライアントクラスの使用を示します。

インターセプトフィルターパターンUMLダイアグラム

ステップ1

フィルタインターフェイスのフィルターを作成します。

Filter.java

パブリックインターフェイスフィルタ{
   公共ボイドは(文字列要求)を実行します。
}

ステップ2

エンティティフィルタを作成します。

AuthenticationFilter.java

パブリッククラスAuthenticationFilterは{フィルタを実装します
   ます。public void {(文字列要求)を実行
      System.out.println( "認証要求:" +リクエスト)。
   }
}

DebugFilter.java

パブリッククラスDebugFilterは{フィルタを実装します
   ます。public void {(文字列要求)を実行
      System.out.println( "リクエストログ:" +リクエスト)。
   }
}

ステップ3

ターゲットを作成します。

Target.java

パブリッククラスターゲット{
   ます。public void {(文字列要求)を実行
      System.out.println( "実行要求:" +リクエスト)。
   }
}

ステップ4

フィルタチェーンを作成します。

FilterChain.java

輸入はjava.util.ArrayList;
輸入java.util.Listに。

パブリッククラスれるFilterChain {
   プライベートリスト<フィルター>フィルター=新しいのArrayList <フィルター>();
   プライベートターゲットターゲット。

   公共ボイドかaddFilter(フィルター・フィルター){
      filters.add(フィルター);
   }

   ます。public void {(文字列要求)を実行
      {:(フィルターフィルターフィルター)のために
         filter.execute(リクエスト)。
      }
      target.execute(リクエスト)。
   }

   公共ボイドがsetTarget(ターゲットターゲット){
      this.target =ターゲット。
   }
}

ステップ5

フィルタマネージャを作成します。

FilterManager.java

パブリッククラスFilterManager {
   れるFilterChainフィルターチェーン;

   公共FilterManager(ターゲットターゲット){
      フィルターチェーン=新しいれるFilterChain();
      filterChain.setTarget(ターゲット)。
   }
   公共ボイドのSetFilter(フィルター・フィルター){
      filterChain.addFilter(フィルター);
   }

   公共ボイドfilterRequest(文字列要求){
      filterChain.execute(リクエスト)。
   }
}

ステップ6

クライアントのクライアントを作成します。

Client.java

パブリッククラスクライアント{
   FilterManager filterManager;

   公共ボイドsetFilterManager(FilterManager filterManager){
      this.filterManager = filterManager。
   }

   公共ボイドのsendRequest(文字列要求){
      filterManager.filterRequest(リクエスト)。
   }
}

ステップ7

インターセプトフィルターのデザインパターンを実証するために、クライアントを使用ます。

FrontControllerPatternDemo.java

パブリッククラスInterceptingFilterDemo {
   公共の静的な無効メイン(文字列[] args){
      FilterManager filterManager =新しいFilterManager(新しいターゲット());
      filterManager.setFilter(新しいAuthenticationFilter());
      filterManager.setFilter(新しいDebugFilter());

      クライアントクライアント=新しいクライアント();
      client.setFilterManager(filterManager)。
      client.sendRequest( "HOME")。
   }
}

ステップ8

出力を確認します。

認証要求:HOME
リクエストログ:HOME
実行要求:HOME