Servlet中过滤器的安全性约束优先级

a.u*_*u.r 6 java servlets servlet-filters security-constraint

在研究servlet中的安全性约束和过滤器时,我在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>
Run Code Online (Sandbox Code Playgroud)

根据我读到的内容:在请求到达某个url 之前应该遇到过滤器,那么,为什么首先调用security-constraint呢?

我知道从安全方面来说这是有意义的(要达到你认证的过滤器),但我想知道请求触发序列.

容器是否首先搜索安全资源,从而触发安全约束?

但这与Head First Servlets和Jsp引用的以下段落相矛盾"

请记住,在DD中,是关于请求发生的事情.换句话说,当Container开始查看元素以决定如何响应时,客户端已经发出请求.请求数据已通过网络发送

或者请求只是触发两者:filter和security-constraint,但是安全约束比过滤器更受青睐?

Ted*_*ddy 0

过滤器执行进入请求的“服务”端。安全限制在此之前生效。它们帮助服务器决定是否提供该 url。您可以将过滤器角色视为“在 servlet 执行之前/之后”执行的角色。