4

私は Spring Security 3.1 を使用しており、2 つのレルムを構成しました。1 つは管理者ユーザー用、もう 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 は、管理者ログインで呼び出されることはありません。私は何が欠けていますか?

4

1 に答える 1

6

要素のpattern属性は、そのパターンに一致するリクエストのみがそのフィルター チェーンを通過することを意味します。<http>

特に、ログイン ページの送信 (通常は、/j_spring_security_check他のすべての要求を処理する 2 番目のチェーンを通過します。したがって、2 番目の要素によって作成されたログイン フィルターによって処理され、ユーザーはログ記録後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 に送信します。

于 2012-11-24T15:32:54.667 に答える