Spring security: добавление «При успешном прослушивании событий входа в систему» - PullRequest
35 голосов
/ 08 октября 2008

Я новичок в Spring Security. Как добавить прослушиватель событий, который будет вызываться при успешном входе пользователя? Также мне нужно получить некоторый уникальный идентификатор сеанса в этом слушателе, который должен быть доступен в дальнейшем. Мне нужен этот идентификатор для синхронизации с другим сервером.

Ответы [ 5 ]

46 голосов
/ 08 октября 2008

Вам необходимо определить Spring Bean, который реализует ApplicationListener .

Затем в вашем коде сделайте что-то вроде этого:

public void onApplicationEvent(ApplicationEvent appEvent)
{
    if (appEvent instanceof AuthenticationSuccessEvent)
    {
        AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) appEvent;
        UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();

        // ....
    }
}

Затем в файле applicationContext.xml просто определите этот бин, и он автоматически начнет получать события:)

42 голосов
/ 08 августа 2013

Проблема с AuthenticationSuccessEvent в том, что он не публикуется при входе в систему. Если вы используете проверку подлинности «помни меня», используйте вместо этого InteractiveAuthenticationSuccessEvent, он работает как для обычного входа, так и для входа в систему, помните меня.

@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {

    @Override
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
    {
        UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
        // ...
    }
}
24 голосов
/ 26 декабря 2012

Аналогичен ответу Филла, но изменен, чтобы принять во внимание Generics:

public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {

  @Override
  public void onApplicationEvent(final AuthenticationSuccessEvent event) {

      // ...

  }

}
10 голосов
/ 11 мая 2011

В Grails с помощью Spring Security Plugin вы можете сделать это в Config.groovy:

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->

        def session = SecurityRequestHolder.request.getSession(false)
        session.myVar = true

}
1 голос
/ 06 января 2019

Другой способ использования @EventListener

@EventListener
public void doSomething(InteractiveAuthenticationSuccessEvent event) { // any spring event
    // your code 

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...