InterceptorとFilter
フィルター、遮断器が必要な理由
Springコードを実装するには,共通の処理が必要な作業が多い.すべてのページに共通の作業に関連するコードを記述する必要がある場合、重複するコードが多くなると、ソースコードの管理が難しくなります.
スプリングに汎用的な処理を行うには、以下の方法を用いることができる.
filter
サーバの実行前と実行後の操作に使用します.これにより、DispatcherServiceletの先端、すなわちスプリングコンテナの外で動作します.クライアントとリソースの間には、1つのチェーンからなる複数のフィルタが集まっています.代表的には、符号化変換処理、XSS防御、LOG、セキュリティ、画像変換、データ圧縮、キャッシュ等を実現するために用いられる.
インプリメンテーション
フィルタを追加するにはjavaxを使用します.servletを実現するFilterインタフェースが必要で,3つの方法がある.
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException;
さぎょうモード
①サーブレットコンテナWebアプリケーションを起動すると、DDファイル(web.xml)に登録されているフィルタインスタンスが作成され、init()が呼び出されます.
②お客様が要求した場合は、該当するフィルタのdoFilter()を呼び出します.
③doFilter()で操作を行い、次のフィルタのdoFilter()を呼び出します.
④最後のフィルターまで③を繰り返す.
⑤最後のフィルタがサーブレットのサービス()を呼び出す.
⑥サーブレットのサービス()が終了すると、コールサービス()の前のフィルタに戻ります.
ㅇ最初の呼び出しのフィルタに戻ることを繰り返す.
◇最後に応答結果をクライアントに送信します.
Interceptor
インタフェースはSpringが提供する技術で、サーバ呼び出しコントローラ(Handler)を派遣する前に、その後に特定の要求と応答を処理することができます.
最も代表的なのは、認証/承認などの共通のタスク、コントローラに伝達される情報を処理する加工、登録処理によく用いられることである.
インプリメンテーション
Intercepter,orgを追加するために.springframework.web.servletを実装しなければならないHandler Interceptorインタフェースには、次の3つの方法があります.
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{ return true; }
postHandleメソッドは、コントローラを呼び出した後に処理する必要がある後処理タスクに使用できます.この方法は、コントローラが返すModelAndViewタイプのパラメータを提供しますが、最近作成されたRestAPIベースのコントローラ(@RestController)はあまり一般的ではなく、Json形式でデータを提供します.
afterCompletionメソッドは、すべてのタスクが完了した後に実行され、すべてのビューで最終結果を作成することを含む.処理要求を返すときに使用するリソースに適しています.
さぎょうモード
DispatcherServiceletはクライアント要求を受信します.
Handlerオブジェクトを取得して、HandleMappingからの所定の要求を処理します.
インポートしたHandlerを呼び出すためにHandler Adapterオブジェクトを指定します.
コントローラを処理するHandlerオブジェクトにブロッカーを適用する場合は、precandleメソッドを呼び出します.
コントローラメソッドを実行した後、ModelAndViewを取得します.
postHandle
ModelAndViewでビュー名をViewResolverに渡し、応答に必要なビューオブジェクトを取得します.
モデルをViewオブジェクトに渡してレンダリング方法を呼び出す
afterCompletion
いじょうりゅう
preHandleに異常が発生した場合、後のpostHandleは呼び出されません.ただし、afterCompletionは常に呼び出されます.
Filter VS Interceptor VS AOP
フィルタとインタフェース
じっこうじかん
さぎょうはんい
使用領域:主に符号化やセキュリティ関連処理などのweb appのグローバル処理が必要な論理をフィルタで実現し,クライアント要求に関わるグローバル処理が必要なタスクについては主にインタフェースで処理する.
IntercepterとAOPの違い
コントローラアプリケーションの追加機能は、AOPを適用するためにadviceに設定することができる.
でも、
Reference
この問題について(InterceptorとFilter), 我々は、より多くの情報をここで見つけました https://velog.io/@sunho6824/Interceptor와-filterテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol