<security-constraint> <url-pattern>和web.xml中的*字符</url-pattern> </security-constraint>

时间:2014-05-16 23:14:01

标签: war web.xml jboss6.x url-pattern security-constraint

使用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-pattern是导致我在第一个安全约束中出现问题的原因。页面位于,并命名为/ 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>

1 个答案:

答案 0 :(得分:3)

<强>更新

你说的是对的,我发布的代码不适用于你需要的目的。

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

  

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

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

最后一个约束:

  

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

根据我的理解,你将无法使用**通配符引用子目录,因为它将是一个特定的匹配。

似乎<url-pattern>/web/admin/*</url-pattern>应该有效。

相关问题