23

フィルターとインターセプターの実際の違いは何ですか? インターセプターはアクションの前後に再帰的に起動し、アクションと特定の URL パターンで起動するようにフィルターを構成できることを認識しています。しかし、それぞれをいつ使用するかをどうやって知るのでしょうか?

私が Struts 2 で読んでいる本では、インターセプターがプッシュされているようで、ユーザーがログインしていることを確認するための認証インターセプターを作成するチュートリアルに従いました。アクションが関連付けられていない場合、インターセプターはそれをキャッチしません。つまり、セキュリティを確保したいすべての jsp にアクションを関連付ける必要があります。それは正しくないようです。

URL を処理する認証フィルターを作成できるので、それを行う必要はありませんが、インターセプターのポイントは何ですか?

4

6 に答える 6

45

最も重要な違いは、「インターセプター」が Struts 2 フレームワークの一部であり、Struts 2 フレームワークによって行われる要求処理の一部にすぎないことです。一方、「フィルター」はサーブレット仕様の一部です。つまり、これらはサーブレット API の一部です。Struts 2 を使用している場合は、Struts 2 アクションの機能をラップするためにインターセプターを使用する必要があります。Struts 2 では処理されないものの、Web アプリケーションに送信されるリクエストに機能をラップしようとしている場合は、フィルタの方が適している可能性があります。

ところで、Struts 2 フレームワーク全体は、Web アプリで構成されたフィルター内に展開され、Web アプリの展開記述子 ( web.xml ) で次のように宣言されます。

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

     <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

すべてのリクエストの URL パターンをキャッチするように構成されたこのフィルタは、Struts 2 フレームワーク全体へのエントリ ポイントです。

それが役立つことを願っています。

于 2011-08-03T15:49:39.230 に答える
5

インターセプタースタックは、リクエストごとに起動します。
フィルタは、それらが定義されているURLにのみ適用されます。

編集-必要に応じてどちらか一方を使用します。すべてのリクエストにCookieが存在することを確認する必要があるとします。インターセプターを使用します。一部のリクエスト(URLによって駆動される)で外部アプリをポップアップする必要があるとしましょう。フィルターを使用します。

インターセプターがより一般的に使用されるツールだと思います...

アクションが関連付けられていないURLがあるのはなぜですか?

于 2010-07-15T14:49:39.823 に答える
0

Struts 2 フレームワークはサーブレット API に依存しません。Struts 2 アクションはコンテナに結合されていません。ほとんどの場合、サーブレット コンテキストは単純なマップとして表され、アクションを分離してテストできます。

フィルターはサーブレット API の一部であるため、Struts 2 フレームワークはインターセプターの概念を使用して、さまざまなアクションによる共通の問題の解決策を共有します。

また、Interceptor クラスと Action クラスのテスト ケースを簡単に作成できます。

于 2014-11-19T07:28:42.813 に答える