在为 J2EE 应用程序中的 Web 模块角色配置安全约束时,我遇到了以下问题:
应用:
提供一个名为 customersServlet 的 servlet,它在 URL 中接收两个参数:
- 表示操作(INS、UPD、DLT 和 DSP)的字符串。
- 用于识别将对其执行操作的客户的标识号。
例如: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
标签中使用通配符*
?
注意:无法更改应用程序,因此我需要一个仅涉及部署描述符的解决方案。
最佳答案
<url-pattern>
tag 只允许非常有限的通配符子集。这可能不是您在其他情况下习惯的情况,其中 *
可以在任何位置使用。您可以在此处下载 Servlet 规范:
http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index2.html
该文档的 SRV.11.2 节描述了如何解释这些 URL 模式。特别是 *
不在这里表示“零个或多个任意字符”。
关于java - url 模式和通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2768500/