2014-10-22 5 views
0

Я изучаю java и Spring некоторое время, в свободное время, поэтому я еще не мастер java и Spring.Объяснение об переопределении SimpleUrlAuthenticationFailureHandler

Для веб-проекта, который я создал для изучения java и Spring, мне пришлось расширять SimpleUrlAuthenticationFailureHandlerm.

Что не ясно, к нему почему после расширения SimpleUrlAuthenticationFailureHandler и первостепенную onAuthenticationFailure, в моем собственном onAuthenticationFailure()... метод, который я должен был вызвать метод super.onAuthenticationFailure(...).

Возможно, я не получил одно из основных правил java.

Вот класс я говорил о

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 (запрос, ответ, исключение) ;? – Unknown

+0

Я отредактировал мое сообщение. Во всяком случае, я проверяю тип исключения и перенаправляю пользователя на определенную страницу. – MDP

+1

Здесь вы устанавливаете только URL-адрес по умолчанию. Поэтому вам нужно написать логику перенаправления, когда произойдет сбой. Эта логика написана в классе SimpleUrlAuthenticationFailureHandler. Поэтому вам нужно вызвать метод super.onAuthenticationFailure. – Unknown

ответ

1

Здесь вы пытаетесь переопределить метод SimpleUrlAuthenticationFailureHandler.

Этот метод определен в SimpleUrlAuthenticationFailureHandler:

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); 
      } 
     } 
    } 

В вашем CustomAuthenticationFailureHandler переопределение метода SimpleUrlAuthenticationFailureHandler:

В основном здесь вы настраиваете только URL по умолчанию. И вам нужно написать стратегию перенаправления. Но он определен в суперклассе SimpleUrlAuthenticationFailureHandler. Поэтому вам нужно вызвать super.onAuthenticationFailure (запрос, ответ, исключение);

Смежные вопросы