2016-10-06 67 views
2

我正在使用Spring會話與Hazelcast和Spring Websockets。由於我不需要clustarization,因此我使用MapSessionRepository。但它不會在會話過期或會話刪除時觸發事件。我想要的是聽取SessionExpiredEvent,然後立即通過websocket斷開用戶連接。所以,我有兩個問題:與榛色會議事件觸發的春季會議

  1. MapSessionRepository不燒成所需事件(SessionExpiredEvent等)

  2. 我不知道怎麼使用過期的HTTP會話發送的WebSocket通知。我需要像simpMessageTemplate.convertAndSendToUser()之類的東西。 但我怎麼能得到用戶?

所以我能看到的唯一一個變體就是在事件觸發的情況下爲SessionRepository<ExpiringSession>編寫自己的實現。我希望你能理解我的問題。提前致謝。

回答

2

春季會議Hazelcast支持確實提供了會話事件的發佈。該功能本身是通過使用SessionEntryListener實現的,因此請確保使用@EnableHazelcastHttpSession annotation,該配置爲Hazelcast集成配置了所有必需的組件。

這也可能是你的興趣,即將舉行的春季會議1.3(目前爲1.3.0.M2)將提供first-class Hazelcast supportHazelcastSessionRepository(將,除其他事項外,更換SessionEntryListener)。

+0

謝謝你的迴應!那麼websockets呢?在會話過期後,Spring是否會自動斷開過期的websocket會話? – jahra

+0

我的意思是我想用'simpMessagingTemplate.convertAndSendToUser'通過websocket向客戶端發送關於過期會話的通知,但無法想象如何去做 – jahra

+0

關於WebSocket集成 - 是的,WebSocket會話在SessionDestroyedEvent上關閉(帶一個看看處理它的'WebSocketRegistryListener')。至於斷開連接處理,我建議你看一下[WebSocket示例](http://docs.spring.io/spring-session/docs/1.2.2.RELEASE/reference/html5/guides/websocket。 html)(位於[這裏](https://github.com/spring-projects/spring-session/tree/1.2.2.RELEASE//samples/websocket) - 提示:搜索'WebSocketDisconnectHandler')。 –