7

フィルターを URL のルートにマップするにはどうすればよいですか? 私は Tomcat 7.0.2 を使用しており、アプリケーションを ROOT.war としてデプロイしています。ウェルカム ページは sign_in.xhtml です。クライアントがサイトのルート (つまり、ドメイン名のみ) のリクエストを送信するたびに、またはクライアントが sign_in.xhtml をリクエストするときに、フィルターを実行したいと考えています。これが私がこれまでに持っているものです:

  <filter>
        <filter-name>My filter</filter-name>
        <filter-class>com.myApp.myFilter</filter-class>        
    </filter>
    <filter-mapping>
        <filter-name>My filter</filter-name>
        <url-pattern>/sign_in.xhtml</url-pattern>
    </filter-mapping>

sign_in.xhtml を直接リクエストすると、フィルターが正常に呼び出されますが、ルートでフィルターを呼び出すためのリクエストを取得する方法がわかりません。サーブレット仕様 (バージョン 3.0) によると

<url-pattern>/</url-pattern>

はデフォルトのサーブレットにマップされ、空の文字列はルートにマップされます。仕様の関連セクションは次のとおりです。

「空の文字列 ("") は、アプリケーションのコンテキスト ルート (つまり、http://host:port/ / の形式のリクエスト) に正確にマップされる特別な URL パターンです。この場合、パス情報は '/' であり、サーブレット パスとコンテキスト パスは空の文字列 ("") です。"

ただし、次の両方の URL パターンにより、Tomcat は例外をスローします。

<url-pattern></url-pattern>
<url-pattern>""</url-pattern>

誰かがこれに光を当てることができれば、本当に感謝しています。ありがとうございました。

アンドリュー

4

1 に答える 1

7

<url-pattern>/</url-pattern>、ルートのリクエストに対して機能するはずです。試してみましたか?

すべてのリクエストをフィルタリングすることが目的の場合は、 を使用する必要があります<url-pattern>/*</url-pattern>


更新: どちらか一方を除外するために、Tomcat 7 で をテストしましたurl-pattern(/と の両方web.xmlを使用@WebFilter(urlPatterns={"/"})) が、実際には期待どおりに動作しませんでした。ただし、Tomcat 6 (サーブレット 2.5) および Glassfish v3 (サーブレット 3.0) でも期待どおりに動作しますurl-pattern/Tomcat 7 のバグの疑いがあるため、これについてissue 49914を報告しました。

于 2010-09-10T17:55:32.860 に答える