2012-06-14 2 views
1

내 로그인 양식은 /account/login입니다. 이 URL로 GET 요청을하면 요청 처리기가 호출되어 논리적보기 이름으로 account/login을 반환하고 /WEB-INF/jsp/account/login.jsp이 처리됩니다. /account/login로그인 페이지 제공 실패한 로그인 시도시 JSP

@RequestMapping(value="/account/login", method=RequestMethod.GET) 
public String login() 
{ 
    return "account/login"; 
} 

POST 요청은 로그인 양식이 모두 (GET 통해)에 의해 제공됩니다, 그래서 내 UsernamePasswordAuthenticationFilter를 호출하고 (POST를 통해)에 /account/login를 제출합니다.

모두 훌륭한 작품입니다.

그러나, 로그인 실패의 경우에 나는 /WEB-INF/jsp/account/login.jsp/WEB-INF/jsp/account/login.jsp 서비스를 제공 할 /account/login에 잘못된 사용자 이름/암호를 게시하는 HTTP가 리디렉션하지 않고 제공 될 싶습니다.

나는과 같이 SimpleUrlAuthenticationFailureHandler.onAuthenticationFailure()을 무시 시도했다 : /account/login에 잘못된 사용자 이름/암호를 게시 할 때

@Override 
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException 
{ 
    request.getRequestDispatcher("account/login").forward(request, response); 
} 

그러나,이 404 응답을 초래한다.

나는 , /account/login.jsp 및 많은 다른 조합을 ServletRequest.getRequestDispatcher()에 전달하려고했지만 아무 것도 작동하지 않는 것 같습니다.

내가 잘못하고있는 아이디어가 있습니까? 디스패처가 JSP 자체가 아니라 요청 처리기로 디스패치하려고한다는 느낌이 들지만, JSP 전달 워크 플로 전체에 익숙하지 않아이를 해결하는 방법을 알지 못합니다.

답변

0

질문을 게시 한 직후 우연히 발견했습니다. 다른 사람에게 길을 비운 경우에 대비하여 여기에 답하십시오. onAuthenticationFailure()에서

, 나는 getRequestDispatcher()/account/login을 통과하고, 또한 그렇게처럼 forward()보다는 include()라고 :

@Override 
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException 
{ 
    request.getRequestDispatcher("/account/login").include(request, response); 
} 

가 잘못된 사용자 이름 및/또는 암호를 사용하여 로그인 양식을 제출 로그인 폼의 원인 JSP가 POST의 응답으로 제공되고 정확한 사용자 이름/암호를 제출하면 여전히 내 UsernamePasswordAuthenticationFilter가 발생합니다 !!