我正在使用带有Hazelcast和Spring Websockets的Spring Session。因为我不需要集群化,所以我对MapSessionRepository
使用hazelcast。但它不会在会话到期或会话删除时触发事件。我想要的是听SessionExpiredEvent
,然后通过websocket立即断开用户。所以我有两个问题:
-
MapSessionRepository
未触发所需事件(SessionExpiredEvent
等) -
我不知道如何使用过期的http会话发送websocket通知。我需要
simpMessageTemplate.convertAndSendToUser()
之类的东西。但是我怎样才能获得用户呢?
所以我能看到的唯一一个变体是为SessionRepository<ExpiringSession>
编写自己的实现与事件触发。我希望你理解我的问题。
Spring Session Hazelcast支持提供会话事件的发布。功能本身是使用SessionEntryListener
实现的,因此请确保使用@EnableHazelcastHttpSession
注释,它配置了Hazelcast集成所需的所有组件。
您可能也会感兴趣,即将到来的春季会话1.3(目前在1.3.0.M2
)将为新的HazelcastSessionRepository
提供一流的Hazelcast支持(除其他外,它将取代SessionEntryListener
)。