6

SpringSecurityバージョン3.1.2を使用しています。

構成は次のとおりです。

<http pattern="/embedded/**" auto-config="true" use-expressions="true" access-denied-page="/embedded/login.htm">
    <intercept-url pattern="/embedded/login-embedded.html" access="hasRole('ROLE_AUTHENTICATED')"/>
    <intercept-url pattern="/embedded/**" access="permitAll"/>
    <form-login login-page="/embedded/login.htm"
                authentication-failure-url="/embedded/login.htm?error=true"
                default-target-url="/embedded/login-embedded.html" />
    <logout logout-success-url="/embedded/index.html"/>

</http>

<http auto-config="true" use-expressions="true" access-denied-page="/login.htm">
    <intercept-url pattern="/login-success.html" access="hasRole('ROLE_AUTHENTICATED')"/>
    <intercept-url pattern="/**" access="permitAll"/>
    <form-login login-page="/login.htm"
                authentication-failure-url="/login.htm?error=true"
                default-target-url="/login-success.html"/>
    <logout logout-success-url="/index.html"/>
</http>

キャプチャを検証するサービスを呼び出すSpringMVCコントローラーにデータをPOSTします。j_spring_security_checkそれが合格すると、 RequestDispatcherに転送されます。

コントローラの関連部分は次のとおりです。

@RequestMapping(value ="/embedded/login.htm", method = RequestMethod.POST)
public String authenticateCaptcha(HttpServletRequest request,
                                  HttpServletResponse response,
                                  @RequestParam String verificationText) throws IOException, ServletException {
    HttpSession session = request.getSession();
    String sessionId = session.getId();
    if (captchaService.validate(sessionId, verificationText)) {
        request.getRequestDispatcher("/j_spring_security_check").forward(request, response);
        return null;
    }
    return buildErrorRedirect(request);
}

私の問題は、キャプチャが検証され、リクエストがSpring Securityに転送され、認証が失敗した後、転送先のエラーページがの/login.htm?error=true代わりになることです/embedded/login.htm?error=true

4

1 に答える 1

4

URL/j_spring_security_checkが一致しない/embedded/**ためauthentication-failure-url="/login.htm?error=true"、2 番目の構成の URL が使用されます。

同様の質問が最近尋ねられました:

2 つのレルムを持つ Spring セキュリティ、最初の default-target-url が呼び出されることはありません

そして、Spring Security の作成者の 1 人がそれに答えました。読むことをお勧めします。

スタック オーバーフローのもう 1 つの重要な部分: 転送されたリクエストが再びフィルター チェーンを通過するのはなぜですか?

于 2012-12-03T09:00:38.917 に答える