Realizar evento personalizado antes de la sesión caducada en spring

Soy principiante en Spring framework.

En mi caso la sesión puede expirar de la siguiente manera.
-> Cierre de sesión correcto (cierre de sesión explícito)

-> Tiempo de espera de sesión (cierre de sesión implícito)

Tengo DML (inserción de registros) en la base de datos cada vez que algún usuario inicia sesión y quiero realizar DML (eliminación de registros) en la base de datos cada vez que la sesión del usuario finaliza (Cierre de sesión implícito).

Mi pregunta es que hay algún modo en spring que nos lo diga antes de la expiración de la sesión. Así que puedo realizar mi evento personalizado antes de la expiración de la sesión.

Gracias por adelantado

Sí, puedes hacerlo con SessionDestroyedEvent .

@Component public class SessionEndedListener implements ApplicationListener { @Override public void onApplicationEvent(SessionDestroyedEvent event) { for (SecurityContext securityContext : event.getSecurityContexts()) { Authentication authentication = securityContext.getAuthentication(); YourPrincipalClass user = (YourPrincipalClass) authentication.getPrincipal(); // do something } } } 

Y en web.xml:

   org.springframework.security.web.session.HttpSessionEventPublisher   

Este evento se activará tanto para el cierre de sesión regular como para el tiempo de espera de la sesión.

He resuelto mi problema siguiendo la respuesta de @Codo similar

 @Component public class SessionCreatedListenerService implements ApplicationListener { private static final Logger logger = LoggerFactory .getLogger(SessionCreatedListenerService.class); @Autowired HttpSession httpSession; @Override public void onApplicationEvent(ApplicationEvent applicationEvent) { if(applicationEvent instanceof HttpSessionCreatedEvent){ //If event is a session created event }else if(applicationEvent instanceof HttpSessionDestroyedEvent){ //If event is a session destroy event // handler.expireCart(); logger.debug(""+(Long)httpSession.getAttribute("userId")); logger.debug(" Session is destory :" ); //log data }else if(applicationEvent instanceof AuthenticationSuccessEvent){ //If event is a session destroy event logger.debug(" athentication is success :" ); //log data }else{ /*logger.debug(" unknown event occur : " Source: " + ); //log data } } }