在J2EE应用程序中为Web模块的角色配置安全性约束时,我遇到以下问题:
提供名为 customersServlet 的servlet,它在URL中接收两个参数:
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
?
注意:应用程序无法更改,因此我需要一个仅涉及触及部署描述符的解决方案。
答案 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
允许您以编程方式限制访问。