Soy nuevo en Spring Security. ¿Cómo agrego un detector de eventos que se llamará cuando el usuario inicie sesión con éxito? También necesito obtener algún tipo de identificación de sesión única en este oyente, que debería estar disponible más adelante. Necesito este ID para sincronizar con otro servidor.Seguridad de primavera: agregar "On successful event event listener"
Respuesta
Debe definir un Spring Bean que implemente ApplicationListener.
Luego, en el código, hacer algo como esto:
public void onApplicationEvent(ApplicationEvent appEvent)
{
if (appEvent instanceof AuthenticationSuccessEvent)
{
AuthenticationSuccessEvent event = (AuthenticationSuccessEvent) appEvent;
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ....
}
}
A continuación, en el archivo de applicationContext.xml, acaba de definir que el frijol y se iniciará automáticamente la recepción de eventos :)
En Grails , con el complemento de seguridad de la primavera, se puede hacer esto en Config.groovy:
grails.plugins.springsecurity.useSecurityEventListener = true
grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->
def session = SecurityRequestHolder.request.getSession(false)
session.myVar = true
}
Forma correcta de obtener la solicitud en Config.groovy def request = RequestContextHolder? .currentRequestAttributes(); – openSource
¿Alguien sabe cómo obtener el usuario conectado actual en este caso? Actualmente estoy usando 'def springSecurityService = Holders.grailsApplication.mainContext.getBean 'springSecurityService'; def user = springSecurityService.getPrincipal() 'pero el usuario siempre es nulo. ¡Gracias! EDITAR: Parece que hacer def user = event.getAuthentication(). GetPrincipal() funciona muy bien! – Dinoo
similar a la respuesta de Phill, pero modificado para tener en cuenta los genéricos:
public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(final AuthenticationSuccessEvent event) {
// ...
}
}
El problema con AuthenticationSuccessEvent es que no se publica en el inicio de sesión de remember-me. Si está utilizando la autenticación Remember-Me use InteractiveAuthenticationSuccessEvent, funciona para el inicio de sesión normal y para el inicio de sesión de Remember-me.
@Component
public class LoginListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(InteractiveAuthenticationSuccessEvent event)
{
UserDetails userDetails = (UserDetails) event.getAuthentication().getPrincipal();
// ...
}
}
¡Muchas gracias! Intenté lograr esto utilizando auth-success-handler, pero me enfrenté a este problema: http://stackoverflow.com/questions/11575860/remember-me-and-authentication-success-handler. Tu respuesta rescató la situación! – yname
- 1. android.widget.Switch - on/off event listener?
- 2. Android - event listener
- 3. flash as3 check event listener
- 4. On-Session-expire-event?
- 5. Javascript OpenLayers before zoom event listener
- 6. jquery .live on load event
- 7. android widget on click event
- 8. Make "scrollLeft"/"scrollTop" cambios no desencadenan scroll event listener
- 9. ¿Cómo puedo agregar Click Event a Ext.Img?
- 10. ASP.NET page_init event?
- 11. `patrón de on` a Backbone` event` de hash
- 12. JQuery Datatables ready event?
- 13. ¿Cuál es la diferencia entre button.click event y button.command event?
- 14. Event/Task Queue Multithreading C++
- 15. jQuery textbox change event
- 16. javascript event-loop pregunta
- 17. android paste event
- 18. ¿Qué ChoiceBox-Event elegir?
- 19. ASP.Net Event Loop Order
- 20. jQuery fadeIn event?
- 21. javascript property change event
- 22. CQRS intent command event
- 23. iframe contents change event?
- 24. jQuery Timed Event
- 25. tinyMCE textarea focusout event?
- 26. JavaScript Event Terminology
- 27. Explicit Event add/remove, incomprendido?
- 28. ¿Delay jquery hover event?
- 29. Backbone add event
- 30. jQuery iframe load() event?
Gracias! Acabo de encontrar AuthenticationSuccessEvent, pero estaba tratando de descubrir cómo registrar un oyente. – axk
¿qué pasa con la ID de la sesión que estaba preguntando? – siebmanb
@siebmanb solo agrega '@Autowired HttpSession session' al oyente. Spring inyectará un proxy que automáticamente delega a la sesión de corrección. –