2

我想限制带有路径 /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 请求时,Web 容器会接受并提交 POST 请求。为什么呢?

4

2 回答 2

0

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

于 2015-01-18T18:22:50.900 回答
0

这是因为第一个安全约束被第二个(顺序很重要)覆盖,它没有 http-methods(如果 web-resource-collection 中没有 http-method 元素,则意味着所有 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>

没用

于 2012-08-01T08:26:40.793 回答