我正在使用Spring Security 3.1并配置了两个领域,一个用于管理员用户,另一个用于其他用户,如下所示:
<!-- Configure realm for administration users -->
<http pattern="/admin/**" >
    <intercept-url pattern="/admin*" access="ROLE_ADMIN,ROLE_USER" />
    <form-login login-page="/adminLogin" default-target-url="/adminWelcome"
        authentication-failure-url="/loginfailed" />
    <logout logout-success-url="/logout" />
</http>
<!--  Configure realm for normal users -->
<http>
    <intercept-url pattern="/welcome*" access="ROLE_USER" />
    <form-login login-page="/login" default-target-url="/welcome"
        authentication-failure-url="/loginfailed" />
    <logout logout-success-url="/logout" />
</http>
一切正常,除了在所有成功登录 - 用户和管理员 - 之外,调用"欢迎"网址.管理员登录永远不会调用"adminWelcome"网址.我错过了什么?
元素中的pattern属性<http>意味着只有与该模式匹配的请求才会通过该过滤器链传递.
特别是,提交登录页面(通常/j_spring_security_check会通过第二个链,处理所有其他请求.因此它将由第二个form-login元素创建的登录过滤器处理,用户将/welcome在登录后重定向到在.
听起来你最好使用单个过滤器链来处理所有请求,使用AuthenticationSuccessHandler选择登录后用户应该重定向到的位置.
如果要配置管理登录页面提交到的URL以使登录请求通过第一个过滤器链,请使用login-processing-url:
<http pattern="/admin/**" >
  <intercept-url pattern="/admin*" access="ROLE_ADMIN,ROLE_USER" />
  <form-login login-page="/adminLogin" login-processing-url="/admin/login.do" default-target-url="/adminWelcome"
    authentication-failure-url="/loginfailed" />
  <logout logout-success-url="/logout" />
</http>
然后修改您的管理员登录表单以提交到该URL.
| 归档时间: | 
 | 
| 查看次数: | 1272 次 | 
| 最近记录: |