Spring Security 3.1拦截网址

时间:2012-05-15 20:02:03

标签: spring authentication spring-security

我有拦截网址的配置,如

<security:http use-expressions="true" disable-url-rewriting="true">

    <security:intercept-url pattern="/secure/admission/*" access="hasRole('ROLE_ADMISSIONER')" />              
    <security:intercept-url pattern="/secure/subdean/*" access="hasRole('ROLE_SUBDEAN')" />
    <security:intercept-url pattern="/secure/referent/*" access="hasRole('ROLE_REFERENT')" />                   
    <security:intercept-url pattern="/secure/index.xhtml" access="hasRole('ROLE_REFERENT, ROLE_SUBDEAN')" />    
    <security:intercept-url pattern="/secure/*" access="hasRole('ROLE_OMNI_ADMIN')" />
    <security:intercept-url pattern="/**" access="isAuthenticated()" />

但是现在我有一个问题是可以访问我的应用程序的url,例如MY_APPLICATION / PririzMaven / secure / admin / updateRole.xhtml,角色为ROLE_ADMISSIONER,url .... / secure / subdean / * with this相同的角色等......但它应该被禁止给这个用户。

你知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:5)

假设PririzMaven是应用程序的上下文路径,/secure/admin/updateRole.xhtml将与路径/**匹配,因此所有经过身份验证的用户都可以访问。您没有/secure/admin的规则。另请注意,单个'*'与子路径不匹配。例如,您应该使用/secure/admin/**来匹配此路径下的所有内容。

您还应该启用调试日志记录并检查规则的应用方式 - 您应该看到针对传入请求URL调用的匹配器,并且将看到正在比较的内容以及匹配的内容。

最后,值得在应用程序上下文文件的顶部添加<security:debug />,这将以更易于阅读的格式添加有关请求处理的其他有用的调试信息。