【发布时间】:2018-04-23 08:37:24
【问题描述】:
websocket 会话被包装在一个 http 会话中,因此当 http 会话超时时,websocket 会话也会超时。
但是,当只有第一个调用是基于会话 cookie 的 http 调用而其余时间是直接建立的连接时, 如果超时,连接如何关闭?
场景 - 我们有一个反向代理来管理会话的验证检查。这意味着它会拦截每个调用并检查会话的有效性。 如果 cookie 过期,它会返回 401。
由于我已将 websockets 集成到该系统中,初始 websocket 调用通过这个带有有效 cookie 的反向代理,将请求升级到 websocket,然后 继续直接发送消息。反向代理不知道这些通过 WS 发送的直接消息。
现在,当 http 会话到期时,对系统进行的其他调用会得到 401。但是上面的 WS 连接根本不知道它并继续发送/接收消息。
在注销的情况下,会在 http 会话上调用无效,因此会通知所有绑定的对象,并且我会收到一个 SessionDisconnectEvent。但是,在超时的情况下,我根本没有任何迹象。 在这种情况下我应该如何终止 WS 连接?
堆栈 - spring + sockJS + 基本 stomp
【问题讨论】:
标签: session websocket spring-websocket httpsession