1.インターセプタの概要
1.1ブロッカーは何ですか?
フィルタ(フィルタ)サーブレットに似てスプリングMVCインターセプター(インターセプタ)は、ユーザの要求をインターセプトし、それに応じて処理のために主です。たとえば、アクセス許可がインターセプタ、ログ記録要求情報によって確認することができる、ユーザのログイン等か否かを判断します。
インターセプタで春のMVCを使用するには、我々は、インターセプタクラスを定義して設定する必要があります。典型的には、インターセプタ・クラスは、2つの方法で定義することができます。
1. HandlerInterceptorは、実装インタフェースまたは継承HandlerInterceptorインタフェースの実装クラス(例えばHandlerInterceptorAdapter)によって定義されます。
2. WebRequestInterceptorによって定義されたインタフェース、または継承WebRequestInterceptorインタフェースの実装クラスを実装します。
達成するためにHandlerInterceptorインタフェースモードは、例えば、カスタムインターセプタクラスのコードは次のように:
パブリック クラス CustomInterceptorが実装HandlerInterceptor { パブリック ブールpreHandle(HttpServletRequestのリクエスト、 HttpServletResponseの応答、オブジェクト・ハンドラ)がスロー例外{ 戻り 偽。 } 公共 ボイドpostHandle(HttpServletRequestのリクエスト、 HttpServletResponseの応答、オブジェクト・ハンドラ のModelAndViewのModelAndView)スロー例外{ } 公共 ボイド afterCompletion(HttpServletRequestのリクエストを、 HttpServletResponseの応答、オブジェクトハンドラ、 例外EX)がスロー例外を{ } }
上記のコードは、カスタムインターセプタHandlerInterceptorは、インターフェイスを実装し、3つのインターフェイスのメソッドを実装します。
-
preHandle()メソッド:このメソッドは、割込みの戻り値は、後続の操作かどうかを示す、コントローラのメソッドの前に行われます。それは行くことを示し、真の値を返す場合、
戻り値がfalseの場合、(次のコールインターセプタコントローラクラスなどを行う方法を含む)すべての後続の操作を中断します。 -
postHandle()メソッド:このメソッドは、コントローラ後方法、及び分析の実行前にビューを呼び出します。この方法は、モデルとビューのリクエストドメインにさらに変更を加えることができます。
-
afterCompletion()メソッド:このメソッドは、要求全体は、実行ビューのレンダリング後に、即ち、完了しました。あなたはこの方法で動作するようにいくつかのリソースのクリーンアップ、ログやその他の情報を得ることができます。
1.2インターセプタ構成
次のようにのように、サーブレットまたはフィルタとして開発開発インターセプタは、設定ファイルで設定する必要があり、構成コードは次のようになります。
<! - 設定迎撃- > < MVC:インターセプタ> <! - <beanクラス= "com.ma.interceptor.CustomeInterceptor" /> - > <! - ブロッカー1。- > < MVC:インターセプタ> <! - コンフィギュレーション・インターセプターの役割パス- > < MVC:マッピングパス= "/ **" /> < MVC:除外-mapping パス= "" /> <! - <MVCで定義された:インターセプター>のみ以下を遮るために、指定されたパスに一致するリクエスト- > < ビーンクラス=「com.ma.interceptor.Intercptor1」/> </ MVC:インターセプタ> <! - 迎撃2 - > < MVC:インターセプター> < MVC:マッピング・パス= "/こんにちは" /> < ビーンクラス= "com.ma.interceptor.Interceptor2" /> </ MVC:インターセプター>
上記のコード、<MVC:インターセプタ>要素は、インターセプタのセットを構成するために使用され、ベースサブ要素<豆>すべての要求を傍受グローバルインターセプタ、で定義され;そして<MVC:インターセプター>要素の定義でありますインターセプタ指定したパスが、それは指定されたパスの下で要求に有効になります。<MVC:インターセプター>子要素<MVC:マッピング>属性パスにそのパスに定義されているインターセプタ機能、のためのパス構成。パス上記のように「/ *」は、すべてのパスを遮断示す値コード属性、「/ハロー」任意「/ハロー」パスの終了時にブロックです。内容が傍受された要求パスに含める必要がない場合、またできる<MVC:除外マッピング>構成要素。
注:サブ要素を<MVCインターセプター>上記のコードの配置の順序に従って書き込まれなければならない、すなわち<MVC:マッピング> <MVC:除外マッピング> <豆>、 そうでなければファイルエラー。
2.実行フローインターセプター
単一の迎撃の2.1実行フロー
プログラムを実行するとき、実行されるインターセプタは特定の順序、定義されたプロファイルとインターセプタに関連付けられたシーケンスの順序があります。
シングルインターセプタは、プログラムの実行過程で、以下に示します:
1. preHandle第実装プログラム()メソッドは、メソッドが、プログラムはプロセッサダウンで実行を継続するか、またはダウンが実行されない場合に真を返します。
2.サービスプロセッサの後(すなわち、コントローラクラス)要求が処理された、postHandle()メソッドは、その後のDispatcherServletを介してクライアント端末に応答を戻します実行します。
3.要求後のDispatcherServletはafterCompletion()メソッドを実行する処理されました。
以上2.2実行フローインターセプター
以下に示すように、プログラムの実行フローでは、(二インターセプタInterceptor1とInterceptor2が存在すると仮定すると、構成ファイルに、構成Interceptor1インターセプタフロント)インターセプタ複数:
図から分かるように、インターセプタが複数同時に存在する場合、それらがpostHandle()メソッドとafterCompletion()メソッドに従って配置されている間、彼らはpreHandle()メソッドは、インターセプタでプロファイルの配置の順に実行されます実行順序の順序を逆にします。