2015-01-10 1 views
2

Я использую Spring Security 3.2.5.RELEASE, и у меня возникают трудности с поиском неудачных попыток входа в систему. Я в настоящее время имеют ApplicationListener настроен следующим образом:Spring Security не обнаруживает ошибки входа в ApplicationListener

@Component 
public class MyApplicationListener implements ApplicationListener<AbstractAuthenticationEvent> { 

    private static Logger logger = LogManager.getLogger(MyApplicationListener); 

    @Override 
    public void onApplicationEvent(AbstractAuthenticationEvent abstractAuthenticationEvent) { 

     if (abstractAuthenticationEvent instanceof AbstractAuthenticationFailureEvent) { 

      logger.warn("Detected an invalid login"); 

     } else if (abstractAuthenticationEvent instanceof AuthenticationSuccessEvent) { 

      logger.info("A user logged in successfully"); 
     } 
    } 
} 

Если пользователь входит в систему успешно, я могу увидеть сообщение об успехе, как и ожидалось. Однако, если пользователь поставляет плохой пароль и т. Д. Сообщение об ошибке никогда не отображается.

Я изменил слушателя так он записывает все ApplicationEvent, как показано ниже:

@Component 
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> { 

    private static Logger logger = LogManager.getLogger(MyApplicationListener); 

    @Override 
    public void onApplicationEvent(ApplicationEvent applicationEvent) { 

     logger.info("Got an event of type {}", applicationEvent.getClass()); 
    } 
} 

Однако только события, связанные с безопасностью, которые авторизованы имеют тип org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent. Ошибка входа в систему не вызывает никаких событий. Я был бы признателен за любые указания, спасибо.

ответ

3

Может быть, это немного поздно, но я получил ту же проблему и решить ее так:

В вашем configureGlobal метод: auth.authenticationEventPublisher(defaultAuthenticationEventPublisher());

Не забудьте объявить DefaultAuthenticationEventPublisher как Bean

@Bean 
public DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(){ 
    return new DefaultAuthenticationEventPublisher(); 
} 

Дополнительная информация здесь: Why the event AbstractAuthenticationFailureEvent is never triggered in spring security?

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