1. ホーム
  2. servlets

[解決済み] サーブレットフィルタに複数のURLパターンを与える

2023-06-10 17:07:22

質問

JSFアプリケーションでサーブレットフィルタを使用しています。 アプリケーションに3つのグループのWebページがあり、Servlet FilterでこれらのページのAuthenticationをチェックしたいのですが、可能でしょうか?

私のフォルダ

/Admin/ *.xhtml

/Supervisor/*.xhtml
/Employee/*.xhtml

と書いているところ web.xml のように

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>com.ems.admin.servlet.LoginFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Employee/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Admin/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/Supervisor/*</url-pattern>
</filter-mapping>

のようなリクエストもありますが

http://localhost:8080/EMS2/faces/Html/Admin/Upload.xhtml

はFilterに入りません。

この3つのフォルダにセキュリティをかけなければなりません。

この問題を解決するにはどうしたらよいでしょうか。

どのように解決するのですか?

URL パターンが / で始まる場合、それはコンテキストのルートからの相対パスです。そのため /Admin/* のページのみにマッチします。 http://localhost:8080/EMS2/Admin/* (にあるページのみにマッチします(仮に /EMS2 がコンテキストのパスであると仮定して)、実際にはそれらを http://localhost:8080/EMS2/faces/Html/Admin/* にあるため、URL パターンは決して一致しません。

URL パターンの前に /faces/Html を付ける必要があります。

<url-pattern>/faces/Html/Admin/*</url-pattern>

また、ウェブプロジェクトの構成や設定を変更して /faces/Html のパスを削除して、ページを開くことができるようにすることもできます。 http://localhost:8080/EMS2/Admin/Upload.xhtml .

フィルターマッピングの構文はすべて問題ありません。しかし、複数の URL パターンを指定するためのより簡単な方法は、ただひとつの <filter-mapping> と複数の <url-pattern> のエントリーがあります。

<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/faces/Html/Employee/*</url-pattern>
    <url-pattern>/faces/Html/Admin/*</url-pattern>
    <url-pattern>/faces/Html/Supervisor/*</url-pattern>
</filter-mapping>