Spring Security Intercept-url模式不起作用

时间:2016-09-10 18:09:10

标签: spring-mvc spring-security

我的应用程序可以有以下网址:

/siteadmin/homepage/
/siteusers/customer/createCustomer

以下是我的spring-security.xml

<beans:beans> 
    <http auto-config="true">
        <intercept-url pattern="/siteusers***" access="isAuthenticated()" />
        <!-- <intercept-url pattern="siteusers/home/*" access="hasRole('USER') OR hasRole('ADMIN')" /> -->
        <intercept-url pattern="/siteadmin***" access="hasRole('ROLE_ADMIN')" />`enter code here`
        <form-login login-page="/siteusers/loginprocess/login" default-target-url="/siteusers/home/homepage"
            login-processing-url="/siteusers/loginprocess/login"
            authentication-failure-url="/siteusers/loginprocess/login?error" username-parameter="username"
            password-parameter="password" />
        <logout logout-success-url="/siteusers/loginprocess/login?logout" logout-url="/siteusers/loginprocess/logout" />
        <!-- enable csrf protection -->
        <csrf />
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="b" password="123456" authorities="ROLE_ADMIN" />
                <user name="a" password="a" authorities="ROLE_USER" /><!-- This user can not access /admin url -->
            </user-service>
        </authentication-provider>
    </authentication-manager>
</beans:beans>

如果我使用用户&#39; a&#39;并点击网址http://localhost:8080/siteadmin/homepage/它允许用户&#39; a&#39;查看页面虽然他的角色不是admin。但是当我尝试点击http://localhost:8080/siteadmin时,Spring Security工作正常,即。它显示访问被拒绝页面。 我想为没有/admin/*角色的用户限制Admin个网址。

1 个答案:

答案 0 :(得分:3)

请参阅AntPathMatcher

  

映射使用以下规则匹配URL:

     
      
  • ?匹配一个字符
  •   
  • *匹配零个或多个字符
  •   
  • **匹配路径中的零个或多个目录
  •   
     

一些例子:

     
      
  • com/t?st.jsp - 匹配com/test.jsp,但com/tast.jspcom/txst.jsp
  •   
  • com/*.jsp - 匹配.jsp目录
  • 中的所有com个文件   
  • com/**/test.jsp - 匹配test.jsp路径下的所有com个文件
  •   
  • org/springframework/**/*.jsp - 匹配.jsp路径下的所有org/springframework个文件
  •   
  • org/**/servlet/bla.jsp - 匹配org/springframework/servlet/bla.jsp,但org/springframework/testing/servlet/bla.jsporg/servlet/bla.jsp
  •   

您的模式/siteadmin***错过了斜线。使用/siteadmin/**