2016-04-27 7 views
0

Ich habe mehrere AuthenticationProvider (MyOwn, Kerberos, Local). Ich möchte nach dem Authentifizierungserfolg einige Informationen mit einem Passwort speichern. Aber Code nach jedem Anbieter ist anders. Daher möchte ich diesen Code direkt nach dem Erfolg von authenticationProvider ausführen. Wie kann ich das machen?tun etwas nach AuthenticationProvider Erfolg in SpringSecurity

Wenn ich AuthenticationSuccessHandler verwende, würde es nach jedem Erfolg vom Anbieter ausgeführt werden. Wenn ich Code in CustomUserDetailsService schreibe, kann ich keine Passwortinformationen darin finden.

Antwort

0

Sie können einen Listener für AuthenticationSuccessEvent registrieren.

Die ProviderManager Delegierten-Authentifizierung zu jedem von ihnen ist AuthenticationProvider registriert. Nach einer erfolgreichen Authentifizierung durch einen der AuthenticationProvider, wird die eine AuthenticationSuccessEvent durch AuthenticationEventPublisher veröffentlichen.

Wenn Sie diese Veranstaltung erhalten möchten und Sie erhalten Zugang zu den Authentication, die folgende Java-Konfiguration wird eine ApplicationListener Bohne im Rahmen für diese Veranstaltung registrieren:

@Bean 
public ApplicationListener<AuthenticationSuccessEvent> authenticationSuccessEventListener() { 
    return new ApplicationListener<AuthenticationSuccessEvent>() { 

     @Override 
     void onApplicationEvent(AuthenticationSuccessEvent event) { 
       Authentication authentication = event.getAuthentication(); 
       // TODO 
     } 
    }; 
} 

Weitere Dokumentation für ApplicationListener kann here zu finden: