サーブレットのセキュリティ制約とフィルターについて調べているときに、web.xml ファイルで次の宣言を行いましたが、期待どおりに機能しませんでした。
<security-constraint>
<web-resource-collection>
<web-resource-name>BeerSelector</web-resource-name>
<url-pattern>/SelectBeer.do</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>model.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/SelectBeer.do</url-pattern>
</filter-mapping>
私が読んだことによると、リクエストが特定のURLに到達する前にフィルターに遭遇する必要があるため、セキュリティ制約が最初に呼び出されるのはなぜですか?
セキュリティの観点からは理にかなっていることはわかっていますが(フィルターに到達するには認証が必要です)、request によってトリガーされるシーケンスを知りたいです。
コンテナーは最初に保護されたリソースを検索し、セキュリティ制約をトリガーしますか?
しかし、これは Head First Servlets and Jsp から引用された次の段落と矛盾します。
DD では、リクエストの後に何が起こるかが重要であることに注意してください。つまり、コンテナが応答方法を決定するために要素を調べ始めた時点で、クライアントはすでにリクエストを行っています。リクエストデータはすでにネットワーク経由で送信されています
または、リクエストが filter と security-constraint の両方をトリガーするだけで、 security-constraint が filter よりも優先されるのでしょうか?