4

使用 Spring for Security,我可以使用以下代码运行程序。

<intercept-url pattern="/web/admin**/**" access="ROLE_ADMIN" requires-channel="https"/>
<intercept-url pattern="/web/**/" access="ROLE_USER,ROLE_ADMIN" requires-channel="https"/>

我目前正在尝试在 web.xml 中执行此操作。使用 JBOSS 部署 .war 文件。下面是我所拥有的, url 模式是导致我在第一个安全约束中出现问题的原因。这些页面位于并命名为 /web/adminarchive /web/adminsettings /web/adminstuff 等... Spring 中的上面代码以我想要的方式处理它,url 为 /web/admin**/** 到捕获所有管理页面。我注释掉了 /* 部分,因为我知道它有效,只留下管理员一个。使用该结构不会引发任何错误,它根本不会提示登录。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Name</web-resource-name>
        <url-pattern>/web/admin**/**</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>ROLE_ADMIN</role-name>
    </auth-constraint>
</security-constraint>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Name</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>ROLE_USER</role-name>
    </auth-constraint>
</security-constraint>
4

1 回答 1

4

根据Java Servlet 3.1 Specification第 12.2 章,映射定义如下:

在 Web 应用程序部署描述符中,使用以下语法来定义映射:

  • 以“/”字符开头并以“/*”后缀结尾的字符串用于路径映射。
  • 以“*”开头的字符串。前缀用作扩展映射。
  • 空字符串 ("") 是一种特殊的 URL 模式,它精确映射到应用程序的上下文根,即
    http://host:port// 形式的请求。在这种情况下,路径信息是'/'<br />,servlet 路径和上下文路径是空字符串(“”)。
  • 仅包含“/”字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet 路径是
    请求 URI 减去上下文路径,并且路径信息为空。
  • 所有其他字符串仅用于完全匹配。

最后一个约束:

所有其他字符串仅用于完全匹配。

据我了解,您将无法使用 ** 通配符来引用子目录,因为它将是特定的匹配项。

似乎<url-pattern>/web/admin/*</url-pattern>应该工作。

于 2014-05-16T23:19:46.517 回答