使用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>
答案 0 :(得分:3)
<强>更新强>
你说的是对的,我发布的代码不适用于你需要的目的。
根据Java Servlet 3.1 Specification第12.2章,映射定义如下:
在Web应用程序部署描述符中,使用以下语法 用于定义映射:
- 以“/”字符开头并以“/ *”后缀结尾的字符串用于路径映射。
- 以'*。'前缀开头的字符串用作扩展名映射。
- 空字符串(“”)是一个特殊的URL模式,它完全映射到应用程序的上下文根,即表单的请求
http:// host:port //。在这种情况下,路径信息是'/'
servlet路径和上下文路径为空字符串(“”)。- 仅包含'/'字符的字符串表示应用程序的“默认”servlet。在这种情况下,servlet路径是
请求URI减去上下文路径,路径信息为空。- 所有其他字符串仅用于完全匹配。
最后一个约束:
所有其他字符串仅用于完全匹配。
根据我的理解,你将无法使用**通配符引用子目录,因为它将是一个特定的匹配。
似乎<url-pattern>/web/admin/*</url-pattern>
应该有效。