url-pattern和通配符

时间:2010-05-04 19:48:04

标签: java java-ee web.xml

在J2EE应用程序中为Web模块的角色配置安全性约束时,我遇到以下问题:

应用:

提供名为 customersServlet 的servlet,它在URL中接收两个参数:

  • 表示操作的字符串(INS,UPD,DLT和DSP)。
  • 用于识别将要执行操作的客户的标识号。

E.G。:网址/servlet/cusotmersServlet?UPD,5用于更新客户5号数据,网址/servlet/customersServlet?DLT,8用于删除客户编号8。

问题:

如果我使用此安全约束,则只能通过指定的角色访问servlet,这是可以的:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>...</web-resource-name>
        <url-pattern>/servlet/clientsServlet*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>clientAdmin</role-name>
    </auth-constraint>
</security-constraint>

但我想限制只将客户插入名为 clientAdmin 的角色。

我已经尝试了几个url模式,但它们都没有按我的意愿工作(所有这些都允许每个角色使用任何参数访问servlet):

<url-pattern>/servlet/clientsServlet?INS,*</url-pattern>
<url-pattern>/servlet/clientsServlet?INS/*</url-pattern>
...

如何在*代码中使用通配符url-pattern

注意:应用程序无法更改,因此我需要一个仅涉及触及部署描述符的解决方案。

2 个答案:

答案 0 :(得分:12)

<url-pattern>标记仅允许非常有限的通配符子集。这可能不是您在其他情况下习惯的,其中*可以在任何位置使用。您可以在此处下载Servlet规范:

http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html

该文档的SRV.11.2节描述了如何解释这些URL模式。特别是,* 在这里表示“零个或多个任意字符”。

答案 1 :(得分:2)

  

注意:无法更改应用程序,因此我需要一个仅涉及触及部署描述符的解决方案。

不确定这是否算作应用程序更改 - 也许您可以将其视为插件。您可以添加Filter。这需要能够向 WEB-INF / libs 添加新的JAR,并能够在 web.xml 中定义过滤器。 Filter允许您以编程方式限制访问。