2016-10-06 40 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')。 –