フィルター(フィルター)の紹介
フィルタは、インターセプトへのWebリソースであり、次のフィルタまたはサーブレットの処理に、メイン缶インターセプト要求と応答をいくつかの処理を行うと、
仕事にチェーンを使用して、ウェブと結合するためのアセンブリの形態でフィルタ。
メリットフィルタ:
表示するには、要求と応答を傍受やフィルタリングの機能を実現するために、クライアントとサーバの間の相互作用のデータを取得することができます。さらに、フィルタは、動的Webアプリケーションのロジックを変更することなく、追加または削除することができます。
フィルタの初期化と破壊は、Webコンテナは、フィルタ・オブジェクトを破棄する前に、フィルタオブジェクトが実行をDestoryは方法を初期化するためのinitメソッドの後に実行される、Webコンテナによって達成されます。
第二に、フィルタの使用
2.1、フィルターの基本的な使用
次のようにサーブレットインターフェースが定義されたフィルタ。
パブリック インターフェイスフィルタは、{ / ** 時に初期化フィルタと呼ばれる* / 公共 ボイドのinit(に、FilterConfigに、FilterConfig)がスローServletExceptionがし; / ** を行うフィルタ処理ロジック* / 公共 ボイドのdoFilter(のServletRequest要求、ServletResponseを応答、 れるFilterChainカテナalberghiera)がスローIOException、ServletExceptionが; / ** 呼び出さ破壊フィルター* / 公共 ボイド(破壊); }
initメソッドは、初期フィルタの間に呼び出される、前記方法がdoFilterメソッドは、フィルタの動作中に実行される方法であるフィルタが破壊するときに呼び出される破壊する、少なくとも二つの論理のdoFilterを保護する必要性は、フィルタは、治療を必要とする現在ロジックをフィルタリング、それは次のフィルタへのジャンプです。
カスタムフィルタは次のよう:
パブリック クラス LogFilter 実装フィルタ{ / ** フィルタの初期化時に呼び出され* / 公共 ボイドのinit(に、FilterConfigに、FilterConfig)がスローServletExceptionが{ のSystem.out.println(「フィルタ初期化」); } 公共 ボイドのdoFilter(のServletRequestリクエスト、ServletResponseを応答、カテナalberghieraれるFilterChain)スローにIOException、ServletExceptionが{ するSystem.out.println(「フィルタリングロジックが実行する」); // 次のリンクへのリンクをフィルタリングするためのジャンプ chain.doFilter(リクエスト、レスポンス); } 公共 ボイド破壊( ){ System.out.println("破壊フィルタ" ); } }
この紙SpringBootの実施形態では、フィルタのクラス構成は次の通り:
@Bean 公共FilterRegistrationBean initLogFilter(){ FilterRegistrationBeanビーン = 新しい新しいFilterRegistrationBean(); LogFilterフィルタ = 新しい新しいLogFilter(); bean.setFilter(フィルタ); // フィルタを適用する必要がURLパス リストの<string>のURL = 新しい新規のArrayList <ストリング> ( ); (urls.add) "/ * /管理"; // のみフィルタ/管理/ *パス bean.setUrlPatterns(のURL); 戻り豆を、 } @Bean 公共 FilterRegistrationBean initTimeFilterを(){ FilterRegistrationBeanビーン = 新しい新 FilterRegistrationBean(); のTimeFilterフィルタ = 新新のTimeFilter(); bean.setFilter(フィルター); // ニーズがフィルタリングされるURLパス リスト<文字列>のURL = 新しい新しいのArrayList <文字列> (); urls.add(「/ *「); // すべてのパスフィルタ bean.setUrlPatterns(URL)を、 返す豆を、 }
カスタムフィルタは、要求がのdoFilter一度に実行されるクライアントを開始するたびに、ときに、プロジェクトの開始のinitメソッドを実行しますプロジェクトが閉じているとき、それはメソッドの実装をDestoryはなりFilterインタフェース、オーバーライドの三つの方法のFilterインタフェースを実装する必要がある、あなたはその後、フィルタを設定することができます方法のdoFilter chain.doFilterは転送次のフィルタに要求をする方法を実行する必要があり、
そうでなければ直接理論的には、それぞれ独立フィルタであり、要求は、ビジネスロジックの最終層、同一の構成に到達できず、手動で異なる実行順序フィルタで提供されてもよい第一の構成の最初の実行時に、複数のフィルタの実行シーケンスを実行しますA。
2.2、フィルター高度利用
フィルタ異なるパスが実際のケースは同じではないフィルタリングする必要がある場合があり、異なる経路は、異なるフィルタを設定してフィルタリングすることができる、上述した実施形態のみLogFilter傍受要求は/ / *パスを管理し、のTimeFilterはすべての要求をフィルタリングします。
濾過パスに別の添加は、手動で異なる順序で実行される異なるフィルタを設けることができる、あなたは@Orderアノテーションによって設定されただけでなく、直接定義することができる春@WebFilterフィルタ注釈を提供し、その後、別の注釈は@Beanを定義せずにすることができますこれは次のように使用されます。
@WebFilter(urlPatterns = "/ *" ) @Order( 1 ) パブリック クラス LogFilterの実装のフィルタ{ // ............... }
@WebFilter(urlPatternsは= "/ * /管理" ) @Order( 2 ) パブリック クラスのTimeFilter 実装フィルタ{ // ... }
定義2つのフィルタ、前記LogFilter最初の実行順序、およびすべての要求をフィルタとのTimeFilter第2の実行順序、要求のフィルタ/管理/ *パス
そして、注釈が@WebFilterサーブレット注釈あり、アノテーションクラスを開始注釈@ServletComponentScanサーブレットスキャンを追加する必要があり、下に示します:
@SpringBootApplication @ServletComponentScan パブリック クラスブートストラップ { パブリック 静的 ボイドメイン(文字列[]引数) { SpringApplication.run(ブートストラップ。クラス)。 } }
第三に、原則フィルターの実現
フィルタ同じとサーブレットコンテナは、ウェブを介して達成されているWebコンテナが格納されたマップサーブレットとフィルタの2つの主要な経路は、URL-partternに対応して配置値と各フィルタサーブレットのインスタンスであります
Webコンテナは、すべてのフィルター、フィルターおよび保存されているすべてのURL地図を初期化します起動するとフィルターを満たす場合は、その都度クライアント要求は、Webコンテナは、すべてのフィルターを介して、最初の要求を取得し、かつますURLの条件は、フィルタフィルタアレイに追加されます。
フィルタ・チェーン、一方の論理キュータフィルタずつからなるフィルタアレイ内のすべてのフィルタ。