Я хочу выполнить пользовательское событие, когда пользователь вышел из сеанса.Пользователь успешно вышел из системы через ровно столько времени, сколько указано в моем application.properties:
server.servlet.session.timeout=10
server.servlet.session.cookie.max-age=10
Я нашел несколько похожих решений, в которых используется SessionDestroyedEvent, например:
@Slf4j
@Component
public class SessionExpiredListener implements ApplicationListener<SessionDestroyedEvent> {
@Override
public void onApplicationEvent(SessionDestroyedEvent event) {
for (SecurityContext securityContext : event.getSecurityContexts()) {
Authentication authentication = securityContext.getAuthentication();
UserPrincipal user = (UserPrincipal) authentication.getPrincipal(); // UserPrincipal is my custom Principal class
log.debug("Session expired!" + user.getUsername());
// do custom event handling
}
}
}
Проблема в том, что SessionDestroyedEvent не запускается одновременно с таймаутом сеанса, в моих тестах он срабатывал до 5 минут после истечения сеанса.
Я также пытался использовать sessionDestroyed в HttpSessionListener, нос похожими результатами.
Есть ли событие, которое сработает точно по истечении сеанса, или есть какой-то способ достичь этого?