Spring security Spring安全性有两个领域,第一个默认目标url永远不会被调用

Spring security Spring安全性有两个领域,第一个默认目标url永远不会被调用,spring-security,Spring Security,我使用的是Spring Security 3.1,并配置了两个领域,一个用于管理员用户,另一个用于其他用户,如下所示: <!-- Configure realm for administration users --> <http pattern="/admin/**" > <intercept-url pattern="/admin*" access="ROLE_ADMIN,ROLE_USER" /> <form-login login

我使用的是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>


一切正常,除了在所有成功登录(用户和管理员)时调用“欢迎”url。“adminWelcome”url永远不会在管理员登录时调用。我错过了什么

元素中的
模式
属性意味着只有与该模式匹配的请求才会通过该过滤器链

特别是登录页面的提交(通常是
/j_spring\u security\u check
将通过第二个链,该链处理所有其他请求。因此,它将由第二个
表单login
元素创建的登录筛选器处理,用户登录后将重定向到
/welcome

听起来您最好使用一个筛选器链来处理所有请求,并使用一个选项来选择用户登录后应重定向到的位置

更新 如果要配置管理员登录页面提交到的URL,以使登录请求通过第一个筛选链,请使用
登录处理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。

我有两个登录表单:adminLogin和login。输入“/adminLogin”在浏览器中,确实会显示adminLogin页面。但是成功的登录会重定向到/welcome,而不是重定向到/adminWelcome。Spring文档建议我应该能够设置多个元素。
/adminLogin
也会经过第二个筛选链,但不会受到影响,因为您没有安全约束s匹配此模式,因此页面将按预期呈现。您可以设置多个
元素,但这更复杂,您需要仔细考虑您将发出什么请求以及哪个筛选器链将处理每个请求。如果您确实确定需要两个块,则可以配置URL w登录表单提交到使用
登录处理url
感谢您指出了多个元素的复杂性。我尝试了您的建议使用登录处理url,但这对我不起作用,所以只使用了一个元素。在我的控制器for/welcome中,我检查了用户的角色并相应地处理它。