Spring会话 - 未调用SessionDestroyedEvent

时间:2018-06-03 07:57:22

标签: spring redis timeout event-listener spring-session

我有一个Spring应用程序,会话以redis存储,短暂超时(1m)。我希望在会话超时后调用一个函数,但是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

注释:

    调用SessionCreatedEvent上的
  1. eventListener
  2. 来自redis的
  3. 会话在超时后消失

1 个答案:

答案 0 :(得分:0)

Spring会话参考中的SessionDeletedEvent and SessionExpiredEvent部分介绍了如何清理会话。

从文档中:

  通过SessionDeletedEvent可以监听SessionExpiredEventSessionMessageListener,该监听器监听 Redis Keyspace事件。为了使其正常工作,需要启用通用命令的 Redis键空间事件和过期事件