Spring Session - SessionDestroyedEvent не вызывается - PullRequest
0 голосов
/ 03 июня 2018

У меня есть приложение Spring, где сессии хранятся в Redis с коротким тайм-аутом (1 м).Я хочу вызвать функцию после истечения времени ожидания сеанса, однако SessionDestroyedEvent @EventListener не вызывается.

SessionListener.java:

import org.springframework.context.event.EventListener;
import org.springframework.session.events.SessionCreatedEvent;
import org.springframework.session.events.SessionDestroyedEvent;
import org.springframework.stereotype.Component;

@Component
public class SessionListener {

    @EventListener
    public void sessionCreated(SessionCreatedEvent event) {
        System.out.println("created"); // gets called
    }

    @EventListener
    public void sessionDestroyed(SessionDestroyedEvent event) {
        System.out.println("destroyed"); // never gets called

    }

}

application.properties:

spring.session.store-type=redis
server.servlet.session.timeout=1m

примечания:

  1. eventListener на SessionCreatedEvent вызывается
  2. сеансы из redis исчезают по истечении времени ожидания

1 Ответ

0 голосов
/ 22 августа 2018

Раздел SessionDeletedEvent и SessionExpiredEvent в справочнике по сеансам Spring описывает порядок очистки сеансов.

Из документации:

Увольнение SessionDeletedEvent или SessionExpiredEvent становится доступным через SessionMessageListener, который прослушивает события Redis Keyspace .Чтобы это работало, События Redis Keyspace для общих команд и событий с истекшим сроком действия должны быть включены

...