2012-12-03 4 views
6

私はSpring Securityバージョン3.1.2を使用しています。Springセキュリティ:複数のセキュリティコンテキストが間違った認証失敗を返します。-url

<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> 

Iはキャプチャを検証するサービスを呼び出しスプリングMVCコントローラにデータをポスト:ここ

、構成です。それが合格すると、それは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); 
} 

私の問題は、キャプチャが検証され、要求が春のセキュリティに転送され、認証が失敗した後、それが転送エラーページが/login.htm?error=trueの代わりであるということです/embedded/login.htm?error=true

答えて

4

URL /j_spring_security_check/embedded/**と一致しないので、authentication-failure-url="/login.htm?error=true"が使用されます - 第2の設定からのものです。

同様の質問が最近頼まれました:

Spring security with two realms, first default-target-url is never invoked

と春のセキュリティはそれに答えのクリエイターの一つ。私はそれを読むことをお勧めします。

スタックオーバーフローのもう一つの立派な作品: Why does a forwarded request pass through filter chain again?

+0

ありがとうございました。最初のリンクは多くの助けになりました。 'form-login'の' login-processing-url'を設定すると、私の問題が分類されました。 –

関連する問題