java - url 模式和通配符

标签 java jakarta-ee web.xml

在为 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/

相关文章:

java线程异常

java - 如何检测/建议 Spring Data (JPA) 存储库?

spring - Servlet URL 模式匹配所有 URL

java - 通过欢迎文件列表自动调用主 servlet

java - Android 在 Cordova 插件中使用自定义依赖项?

jakarta-ee - 注入(inject) JMS @Resource 时 Glassfish 中的 NullPointer

jakarta-ee - 带有 Dragon(DNS) API 的语音到文本 java 应用程序

jakarta-ee - 在哪里可以下载 Java EE 6 教程示例?

caching - 过滤 web.xml 中的 url 模式冲突?

java - Java 'for each' 循环如何工作?