2015-09-07 2 views
2

я создал пользовательскую аутентификацию обработчик отказа, как это:пружина безопасность AuthenticationFailureHandler с Java конфигурацией

public class TrackerAuthFailureHandler extends SimpleUrlAuthenticationFailureHandler{ 

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

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

и я создал компонент, как это:

@Bean 
    public AuthenticationFailureHandler trackerAuthFailureHandler(){ 
     SimpleUrlAuthenticationFailureHandler handler=new SimpleUrlAuthenticationFailureHandler(); 
     return handler; 
    } 

и пружинные конфигурации, как это:

@Autowired 
    private TrackerAuthFailureHandler trackerAuthFailureHandler; 

    @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
       .authorizeRequests() 
        .anyRequest().authenticated() 
        .and() 
       .formLogin() 
        .loginPage("/login") 
        .permitAll() 
        .failureHandler(trackerAuthFailureHandler); 
    } 

Но фаза не обнаружена. есть идеи?

+1

вы инициализируетесь SimpleUrlAuthenticationFailureHandler вместо TrackerAuthFailureHandler попробовать новую TrackerAuthFailureHandler() –

ответ

4

Когда вы используете путь инъекции аннотаций, вы должны использовать @Component в верхней части класса TrackerAuthFailureHandler. как это:.

@Component 
public class TrackerAuthFailureHandler extends SimpleUrlAuthenticationFailureHandler{