在web.xml中声明的http-method不会阻止其他http方法

时间:2012-08-01 08:02:01

标签: rest servlets web.xml

我想限制带有路径/ rest / *的域仅用于GET请求。所以我在我的web.xml中声明它:

<security-constraint>
  <web-resource-collection>
    <web-resource-name>All</web-resource-name>
    <url-pattern>/rest/*</url-pattern>
    <http-method>GET</http-method>
  </web-resource-collection>
</security-constraint>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Auth</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>Admin</role-name>
  </auth-constraint>
</security-constraint>

然而,当对(例如)'/ rest / add'执行POST请求时,webcontainer接受并提交POST-Request。为什么会这样?

2 个答案:

答案 0 :(得分:0)

那是因为第一个安全约束被第二个(订单重要)覆盖,它没有http方法(如果没有http-method元素,在web-resource-collection中,它就意味着允许所有HTTP方法。)

这意味着这段代码

<security-constraint>
  <web-resource-collection>
    <web-resource-name>All</web-resource-name>
    <url-pattern>/rest/*</url-pattern>
    <http-method>GET</http-method>
  </web-resource-collection>
</security-constraint>

没用了

答案 1 :(得分:0)

未覆盖安全约束。如果不同约束的url模式相同,则它们是相加的。在上面的示例中,url模式是不同的,因此第一个获胜并且允许帖子。