4

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

应用:

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

  • 表示操作(INS、UPD、DLT 和 DSP)的字符串。
  • 标识将对其执行操作的客户的标识号。

EG:url/servlet/cusotmersServlet?UPD,5用于更新5号客户数据,url/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标签中使用通配符?

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

4

2 回答 2

12

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

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

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

于 2010-05-04T20:01:45.563 回答
2

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

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

于 2010-05-05T07:39:31.857 回答