41

SpringSecurityは初めてです。ユーザーが正常にログインすると呼び出されるイベントリスナーを追加するにはどうすればよいですか?また、このリスナーで何らかの一意のセッションIDを取得する必要があります。これは、後で使用できるようにする必要があります。別のサーバーと同期するには、このIDが必要です。

4

5 に答える 5

54

ApplicationListenerを実装するSpringBeanを定義する必要があります。

次に、コードで次のようにします。

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

        // ....
    }
}

次に、applicationContext.xmlファイルで、そのBeanを定義するだけで、イベントの受信が自動的に開始されます:)

于 2008-10-08T11:14:31.270 に答える
49

AuthenticationSuccessEvent の問題は、remember-me ログインで公開されないことです。記憶認証認証を使用している場合は、代わりに InteractiveAuthenticationSuccessEvent を使用してください。これは、通常のログインでも記憶ログインでも機能します。

@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {

    @Override
    public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
    {
        UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
        // ...
    }
}
于 2013-08-08T13:56:45.450 に答える
26

Phill's answer に似ていますが、Generics を考慮するように変更されています。

public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {

  @Override
  public void onApplicationEvent(final AuthenticationSuccessEvent event) {

      // ...

  }

}
于 2012-12-26T16:34:56.220 に答える