2012-07-26 12 views
11

私はかなり長い間Grailsを勉強してきました。そして、フィルターとインターセプターについて少し調べました。両方とも、セッションを追跡したり、特定のコントローラーの権限のないユーザーをリダイレクトしたりする機能とほぼ同じです。Grails Filters vs Interceptor

しかし、インターセプタよりもフィルタを使用する必要があるのはなぜですか、またその逆でも、私は混乱しています。 Inceptorsには2つのコントローラメソッドbeforeInterceptorafterInterceptorがあり、フィルタには3つの共通クロージャbefore,afterafterViewがあります。

私の質問は、Interceptorに対してFilterを使用した場合の長所と短所を示しています。このようにして、開発者は、特定のコントローラでフィルタやインターセプタを使用して、トラッキング、リダイレクトなどを行うタイミングと場所と理由を決定できます。

答えて

14

コントローラの1つまたは両方のインターセプタを使用して、ロジックはそのコントローラにのみ適用されます。

ロジックが複数の(またはすべての)コントローラに適用される場合、またはビューがレンダリングされた後に何かを行う必要がある場合(afterViewに相当するインターセプタがない場合)、またはすべてを集中管理したい場合別のコントローラーファイルに広がる代わりに1つの場所。

+4

です。しかし、同様のインターセプトロジックを保持する抽象コントローラを作成し、このコントローラを他のすべてのコントローラの親にすることはできませんか? どのような場合に、フィルタリングロジックを 'Filters'によってそのクロージャー、' afterView'で宣言する必要があると言えますか? –

+0

そして、少し異なるロジックが必要なので、別の抽象コントローラを作成する必要があります。フィルタを使用すると、コードを一箇所に集中させ、必要のない依存関係をスキップすることができます。 –

0

古いフィルタ(Grails 2より)は、Grails 3では廃止予定です。フィルタへの置き換えはインターセプタです。

インターセプタの使用は、認証、ログなどのアクションです。
インターセプタは、その名前が示すように、着信するWebリクエストをインターセプトして関連するアクションをトリガします。アクションは、関連するコントローラーで定義されます。

インターセプタには、静的コンパイルのサポートなどのいくつかの大きなメリットがあり、柔軟な設定が可能です。 (){TRUE}
ブール - - ボイドafterView(){}

- ブール(){TRUE}


これらはインターセプターの主要3つの方法であります

IterceptorsはSpring Beanとして設定されており(Springアプリケーションコンテキスト内)、名前によって自動配線されるように設定されています。