sessions expired ejemplo control login spring-security listener

login - expired - spring security session timeout redirect



Seguridad de primavera: agregando "On successful event listener" (4)

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.


En Grails, con Spring Security Plugin, puedes 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 }


Necesita definir un Spring Bean que implementa ApplicationListener .

Luego, en tu código, haz algo como esto:

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

Luego, en su archivo applicationContext.xml, simplemente defina ese bean y comenzará a recibir eventos automáticamente :)


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 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(); // ... } }