以下は、URL パスのマッチング方法に関する Servlet 3.0 仕様の段落です。
The first successful match is used with no further matches attempted:
- コンテナは、リクエストのパスとサーブレットのパスが正確に一致するものを見つけようとします。一致が成功すると、サーブレットが選択されます。
- コンテナは再帰的に最長のパス プレフィックスを照合しようとします。これは、パス セパレータとして「/」文字を使用して、一度に 1 ディレクトリずつパス ツリーをステップ ダウンすることによって行われます。最長一致によって、選択されるサーブレットが決まります。
- URL パスの最後のセグメントに拡張子 (.jsp など) が含まれている場合、サーブレット コンテナーは、拡張子の要求を処理するサーブレットを照合しようとします。拡張子は、最後の「.」の後の最後のセグメントの一部として定義されます。キャラクター。
- 前の 3 つのルールのいずれにもサーブレットが一致しない場合、コンテナーは要求されたリソースに適したコンテンツを提供しようとします。アプリケーションに「デフォルト」のサーブレットが定義されている場合は、それが使用されます。多くのコンテナーは、コンテンツを提供するための暗黙的なデフォルト サーブレットを提供します。
コンテナは、照合のために大文字と小文字を区別する文字列比較を使用する必要があります
したがって、完全一致はプレフィックスよりも優先され、プレフィックスは拡張よりも優先され、最終的にはユニバーサル パターンになります。
したがって、できることは/*、役割を指定せずにユニバーサル マッピングを追加するだけです。ユニバーサル マッピングは最後に一致し、ロールが指定されていない場合、誰も次のようにリソースにアクセスできません。
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
<!--No Authorization Required -->
<security-constraint>
<web-resource-collection>
<url-pattern>/faces/index.xhtml</url-pattern>
</web-resource-collection>
</security-constraint>
<!--All roles can access -->
<security-constraint>
<web-resource-collection>
<url-pattern>/faces/users.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
Servlet 3.0 ドキュメントセクション 12.1 URL パスの使用を参照