この記事では、主にSpringMVCでのインターセプターの導入、コード、構成、その他のコンテンツの例を次のように研究しています。
SpringMVCのプロセッサインターセプターは、サーブレット開発のフィルターフィルターに似ており、プロセッサの前処理と後処理に使用されます。この記事では、主にインターセプターがSpringMVCでどのように定義されているか、およびインターセプターの実行と使用法をまとめたものです。
springMVCでは、インターセプターを定義して、ハンドラーインターセプターインターフェイスを実装し、次のようにインターフェイスで提供される3つのメソッドを実装します。
// Interceptor1public class HandlerInterceptor1を実装するHandlerInterceptor {@Override public boolean prehandle(httpservletrequest request、httpservletresponse応答、オブジェクトハンドラー)スロー{system.out.println( "handlerinterceptor1 .... prehandle"); Trueはリリースリリースリターンをtrue;}@Override public void posthandle(httpservletrequest request、httpservletresponse Response、object handler、modelandview modelandview)をスロー{system.out.println( "handlerInterceptor1..poshandle");}応答、オブジェクトハンドラー、例外ex)スロー例外{system.out.println( "handlerinterceptor1..aftercompletion");}}これら3つの方法について簡単な分析を行います。
SpringMVCでは、インターセプターが特定のハンドライング用に構成されています。つまり、インターセプターがハンドラー留めで構成されている場合、ハンドラーを介してマッピングされたハンドラーは最終的にインターセプターを使用します。たとえば、構成ファイルで構成したマッパーがorg.springframework.web.servlet.handler.beannameurlhandlermappsであると仮定します。インターセプターを次のように構成できます。
<bean> <プロパティ名= "インターセプター"> <list> <ref bean = "handlerinterceptor1"/> <ref bean = "handlerinterceptor2"/> </list> </property> </bean> <bean id = "handlerinterceptor1"/> <bean id = "handlerinterceptor2"/>>>
SpringMVCでは、グローバルインターセプターを構成する方法は?上記のように、SpringMVCのインターセプターは特定のマッパーをターゲットにしています。この問題を解決するために、SpringMVCフレームワークは、グローバルに類似したインターセプターを各ハンドラーラッピングに構成して構成され、グローバルなインターセプターになることができます。構成は次のとおりです。
<! - インターセプターを構成 - > <MVC:インターセプター> <! - 順番に実行された複数のインターセプター - > <MVC:インターセプター> <MVC:マッピングパス= "/**"/> <! - subURLパスを含むすべてのURLのインターセプトを示します - > <bean/> </mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc:mvc path = "/**"/> <bean/> </mvc:interceptor>
一般に、この構成を使用して、<MVC:マッピング>でインターセプトするURLを指定するだけです。
上記の構成に従って、2つのインターセプター、HandlerInterceptor2とHandlerInterceptor3を記述します。次に、3つのインターセプターの実行をテストし、関連する概要を作成します。
言い換えれば、3つのインターセプターのプリハンドル法の返品値をTrueに変更して、インターセプターの実行順序をテストします。テスト結果は次のとおりです。
HandlerInterceptor1….prehandle
HandlerInterceptor2….prehandle
HandlerInterceptor3…HandlerInterceptor3….posthandle
HandlerInterceptor2….posthandle
HandlerInterceptor1….posthandleHandlerInterceptor3….AfterCompletion
HandlerInterceptor2….AfterCompletion
HandlerInterceptor1….AfterCompletion
概要は、印刷された結果に基づいて行われます。すべてのインターセプターがリリースされると、PreHandleメソッドは構成の順序で実行されます。一方、他の2つのメソッドは構成の順に実行されます。
3番目のインターセプターのプリハンドル方法の返品値をFalseに変更しますが、最初の2つはまだ真であり、インターセプターの実行順序をテストします。テスト結果は次のとおりです。
HandlerInterceptor1….prehandle
HandlerInterceptor2…
HandlerInterceptor3…HandlerInterceptor2….AfterCompletion
HandlerInterceptor1….AfterCompletion
印刷された結果に基づいて要約を作成します。
1.インターセプター1と2がリリースされるため、インターセプター3の事前ハンドルを実行できます。言い換えれば、以前のインターセプターを解放することができ、後者のインターセプターはPreHandleを実行できます。
2。インターセプター3はそれをリリースしないため、他の2つの方法は実行されません。つまり、インターセプターがそれをリリースしない場合、その他の2つの方法は実行されません。
3.リリースされないインターセプターがある限り、すべてのインターセプターのポスタンドルメソッドは実行されませんが、PreHandleが実行およびリリースされる限り、折り畳み後のメソッドが実行されます。
実際、上記の状況を参照できます。それは特別なケースです。実行中の結果を見てみましょう。
HandlerInterceptor1….prehandle
明らかに、最初のインターセプターのプリハンドル方法のみが実行されました。それらのいずれもリリースされていないため、それらのどれもPosthandleメソッドと後分解法を実行しませんでした。
たとえば、統一された例外処理ロジックを書きたい場合は、インターセプターをインターセプターチェーンの最初の位置に配置し、リリースする必要があります。後方のみが実行されるため、インターセプターチェーンの最初の位置に配置された場合、抑制法は実行されます。
たとえば、認証インターセプターにログインして、インターセプターリンクの最初の位置に配置します(統一された例外処理がある場合は、統一された例外処理の背後に配置する必要があります)。許可確認インターセプターは、認証インターセプターにログインした後に配置されます(許可はログイン後にのみ検証されるため)。
SpringMVCのインターセプターの使用方法を説明するためのログイン検証インターセプターを次に示します。
まず、要件を見てみましょう。私たちが傍受したいこと、私たちが傍受したときに何をしたいのか。アイデアは次のとおりです。
1。ユーザーリクエストURL
2。インターセプターはインターセプトの検証を実行します。要求されたURLがパブリックアドレス(ログインせずにアクセスできるURL)である場合は、リリースします。
ユーザーセッションが存在しない場合は、ログインページにジャンプします。
ユーザーセッションが存在する場合は、リリースして操作を続行します。
// @RequestMappingでログイン( "/login")public string login(httpservletrequest request、stringユーザー名、文字列パスワード)例外{// "redirect:queryitems.action";} // login @requestmapping( "/logout")public string logout(httpservletrequest request)スロー{httpsession session = request.getsession(); session.invalidate(); return "redirect:queryitems.//テストインターセプター1パブリッククラスのログニンセプターを実装して、HandlerInterceptor {// Handler Methodを入力する前に実行すると、// ID認証とID承認に使用できます。認証が合格しない場合、ユーザーがログインしていないことを意味します。この方法はそれを傍受する必要があり、それ以上の実行はありません。それ以外の場合、@Overrideパブリックブールプリハンドル(httpservletrequestリクエスト、httpservletresponse応答、オブジェクトハンドラー)例外{//要求されたurlstring url = request.getrequesturi(); // direaquireを取得します。アドレスif(url.indexof( "login.action")> 0){//ログイン送信が実行されている場合、リリースリターントゥルー;}ユーザーの身元を確認する必要があり、ログインページrequest.getRequestDispatcher( "/web-inf/jsp/login.jsp")。次に、インターセプターを構成します。
<! - インターセプターの構成 - > <MVC:インターセプター> <! - 順番に実行 - > <MVC:インターセプター> <MVC:マッピングパス= "/**"/> <! - サブールパスを含むすべてのURLをインターセプト - > <bean/>> </mvc:> </mvc:> </mvc:interpector> </mvc:
このようにして、URLを要求すると、定義したばかりのインターセプターによってキャプチャされ、セッションにユーザー情報があるかどうかを判断します。そうでない場合は、ログインページにジャンプしてログインします。
<form action = "$ {pagecontext.request.contextpath} /login.action" method = "post"> username:<input type = "text" name = "username" /> <br> password:<input type = "password" name " /> <br> <入力タイプ=" namこれは基本的に、インターセプターの使用の紹介です。
上記は、SpringMVCのインターセプターの詳細な説明とコードの例に関するこの記事のすべての内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!