2014-10-22 1 views
0

저는 여가 시간에는 잠깐 동안 자바와 스프링을 공부 했으므로 아직 마스터 자바도 스프링도 없습니다.SimpleUrlAuthenticationFailureHandler를 재정의하는 것에 대한 설명

웹 프로젝트의 경우 자바와 스프링을 공부하기 위해 SimpleUrlAuthenticationFailureHandlerm을 확장해야했습니다. 내 자신의 onAuthenticationFailure()... 방법에 SimpleUrlAuthenticationFailureHandler 및 최우선 onAuthenticationFailure을 확장 한 후 나는 super.onAuthenticationFailure(...) 메소드를 호출 한 이유는 분명하지 무엇

입니다.

아마도 자바의 주요 규칙 중 하나를 얻지 못했습니다. 여기

는 SimpleUrlAuthenticationFailureHandler의 메소드를 오버라이드 (override)하려고에 대한

public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { 

    @Override 
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {  

     if(exception.getClass().isAssignableFrom(BadCredentialsException.class)) { 
       setDefaultFailureUrl("/url1"); 
     } 

     else if (exception.getClass().isAssignableFrom(DisabledException.class)) {   
      setDefaultFailureUrl("/url2"); 
     } 

     else if (exception.getClass().isAssignableFrom(SessionAuthenticationException.class)) {  
      setDefaultFailureUrl("/url3"); 
     } 

     super.onAuthenticationFailure(request, response, exception); //why this??? 
    }  
} 
+0

super.onAuthenticationFailure (request, response, exception);을 호출하기 전에 정확히 무엇을해야합니까? – Unknown

+0

내 게시물을 편집했습니다. 어쨌든 예외 유형을 확인하고 사용자를 특정 페이지로 리디렉션합니다. – MDP

+1

여기에서는 기본 URL 만 설정합니다. 따라서 오류가 발생하면 리디렉션 논리를 작성해야합니다. 그 논리는 SimpleUrlAuthenticationFailureHandler 클래스로 작성됩니다. 따라서 super.onAuthenticationFailure 메소드를 호출해야합니다. – Unknown

답변

1

여기서 내가 말하고 클래스입니다.

이 방법은 SimpleUrlAuthenticationFailureHandler에 정의되어 있습니다 만 기본 URL을 설정하는 기본적 여기

: 당신의 CustomAuthenticationFailureHandler에서

public void onAuthenticationFailure(HttpServletRequest request, 
      HttpServletResponse response, AuthenticationException exception) 
      throws IOException, ServletException { 
     if (this.defaultFailureUrl == null) { 
      this.logger.debug("No failure URL set, sending 401 Unauthorized error"); 
      response.sendError(401,"Authentication Failed: " + exception.getMessage()); 
     } else { 
      saveException(request, exception); 

      if (this.forwardToDestination) { 
       this.logger.debug("Forwarding to " + this.defaultFailureUrl); 
       request.getRequestDispatcher(this.defaultFailureUrl).forward(request, response); 
      } else { 
       this.logger.debug("Redirecting to " + this.defaultFailureUrl); 
       this.redirectStrategy.sendRedirect(request, response, 
         this.defaultFailureUrl); 
      } 
     } 
    } 

당신은 SimpleUrlAuthenticationFailureHandler의 방법을 무시하고 있습니다. 리디렉션 전략을 작성해야합니다. 하지만 SimpleUrlAuthenticationFailureHandler 수퍼 클래스에 정의되어 있습니다. 따라서 super.onAuthenticationFailure (request, response, exception)를 호출해야합니다.

관련 문제