Ich bin neu bei Spring Security. Wie füge ich einen Ereignis-Listener hinzu, der aufgerufen wird, wenn sich ein Benutzer erfolgreich anmeldet? Außerdem muss ich eine einzigartige Sitzungs-ID in diesem Listener erhalten, die weiter verfügbar sein sollte. Ich brauche diese ID, um mit einem anderen Server zu synchronisieren.Spring Sicherheit: Hinzufügen "Bei erfolgreichem Login-Ereignis Listener"
Antwort
Sie müssen eine Spring Bean definieren, die ApplicationListener implementiert.
Dann in Ihrem Code, tun Sie etwas wie folgt aus:
public void onApplicationEvent(ApplicationEvent appEvent)
{
if (appEvent instanceof AuthenticationSuccessEvent)
{
AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) appEvent;
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ....
}
}
Dann in Ihrer applicationContext.xml Datei definieren nur die Bohne und es startet automatisch Ereignisse Empfang :)
In Grails , mit Spring Security Plugin, können Sie dies in Config.groovy tun:
grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->
def session = SecurityRequestHolder.request.getSession(false)
session.myVar = true
}
Richtiger Weg, um eine Anfrage in Config.Groovy zu bekommen def Anfrage = RequestContextHolder? .currentRequestAttributes(); – openSource
Kann jemand den aktuellen angemeldeten Benutzer in diesem Ereignis erhalten? Ich benutze derzeit 'def springSecurityService = Holders.grailsApplication.mainContext.getBean 'springSecurityService'; def user = springSecurityService.getPrincipal() 'aber Benutzer ist immer Null. Vielen Dank! EDIT: Sieht aus wie def user = event.getAuthentication(). GetPrincipal() funktioniert gut! – Dinoo
Ähnlich wie Phill Antwort, aber modifizierte Generics zu berücksichtigen:
public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(final AuthenticationSuccessEvent event) {
// ...
}
}
Das Problem mit AuthenticationSuccessEvent ist, dass es nicht auf remember-me Login veröffentlicht wird. Wenn Sie die remember-me-Authentifizierung verwenden, verwenden Sie stattdessen InteractiveAuthenticationSuccessEvent. Dies funktioniert sowohl für die normale als auch für die remember-me-Anmeldung.
@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
{
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ...
}
}
Vielen Dank! Ich habe versucht, dies zu erreichen, indem Sie auth-success-handler, aber mit diesem Problem konfrontiert: http://stackoverflow.com/questions/11575860/remember-me-and-authentication-success-handler. Deine Antwort hat die Situation gerettet! – yname
- 1. Spring-Sicherheit ConcurrentSessionControlStrategy-Problem
- 2. Spring Social Facebook + Spring Sicherheit
- 3. Spring Sicherheit: Wie Spring Sicherheit neue Sitzung in SessionRegistry registriert?
- 4. Container-verwaltete Sicherheit, Spring-Sicherheit und Authentifizierung
- 5. Spring 3.5 Sicherheit
- 6. Spring Sicherheit erhalten Benutzerobjekt
- 7. Spring Sicherheit Java Config
- 8. Spring Sicherheit Single Anmelden
- 9. Deaktivieren des Symbolscanners bei erfolgreichem Scan?
- 10. Spring-Sicherheit mit Authentifizierungstoken in Java
- 11. Sicherheit: 090398 Ungültiger Betreff - Spring and weblogic
- 12. Spring JMS Message Listener Container
- 13. Reactjs Axios/Spring Boot Sicherheit
- 14. Spring Sicherheit authenticate Ausnahmen Handhabung
- 15. Prototyp hinzufügen Ereignis-Listener
- 16. Spring Sicherheit Java Config grundlegende Authentifizierungsfilter
- 17. Spring Sicherheit Authentifizierung: Get Benutzername ohne SPRING_SECURITY_LAST_USERNAME
- 18. Rest Anruf erfordert JSESSIONID (Spring Boot, Spring Sicherheit, OAuth2, Zuul)
- 19. Spring Sicherheit mit mehreren Login-Seiten
- 20. Spring Sicherheit Authentifizierung/Autorisierung über REST Endpunkt
- 21. Hinzufügen von Listener zu JPanel
- 22. Hinzufügen von Listener zum Objektprototyp
- 23. jquery plugin hinzufügen Ereignis Listener
- 24. Android: Facebook erhalten "User Access Token", bei erfolgreichem Login
- 25. Chrome zeigt "abgebrochen" bei erfolgreichem Dateidownload (200 Status)
- 26. Spring-Sicherheit für Ldap-Verbindung konfigurieren
- 27. Spring-Core 3.2.2 + Spring-Sicherheit 3.1.4: java.lang.IncompatibleClassChangeError: org.springframework.asm.ClassVisitor
- 28. Spring/Tomcat-Jdbc Pool - neue Verbindung Listener
- 29. Hinzufügen von Ereignis-Listener zum Formularelement hinzugefügt durch Ereignis-Listener
- 30. Spring: Annotation äquivalent Sicherheit: Authentifizierung-Manager und Sicherheit: global-Methode-Sicherheit
Danke! Habe gerade AuthenticationSuccessEvent gefunden, versuchte aber herauszufinden, wie man einen Listener registriert. – axk
Was ist mit der Sitzungs-ID, nach der er gefragt hat? – siebmanb
@siebmanb fügen Sie dem Hörer nur '@Autowired HttpSession session' hinzu. Spring wird einen Proxy eingeben, der automatisch an die Korrektursitzung delegiert. –