2012-12-03 4 views
6

스프링 보안 버전 3.1.2를 사용하고 있습니다.스프링 보안 : 다중 보안 컨텍스트이지만 잘못된 authentication-failure-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> 

나는 보안 문자의 유효성을 검사하는 서비스를 호출하는 스프링 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

/j_spring_security_check/embedded/**과 일치하지 않으므로 authentication-failure-url="/login.htm?error=true"이 사용됩니다. 두 번째 구성에서 나온 것입니다.

비슷한 질문을 최근 요청되었습니다

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'을 설정하면 문제가 해결되었습니다. –