我有一个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
注释:
答案 0 :(得分:0)
Spring会话参考中的SessionDeletedEvent and SessionExpiredEvent部分介绍了如何清理会话。
从文档中:
通过SessionDeletedEvent
可以监听SessionExpiredEvent
或SessionMessageListener
,该监听器监听 Redis Keyspace事件。为了使其正常工作,需要启用通用命令的 Redis键空间事件和过期事件