【问题标题】:Websocket chat message does not prolong HttpSessionWebsocket 聊天消息不会延长 HttpSession
【发布时间】:2017-07-25 05:55:25
【问题描述】:

我有 Java Spring 应用程序,它通过 WebSocket 提供聊天端点。用户使用 API 调用登录,会话超时 10 分钟。

为了开始聊天,我必须连接到 WebSocket 端点。它确实连接,没问题,但问题是:从客户端发送的每条聊天消息都不会延长在HttpSession中的登录时间,所以10分钟后它就会超时。

如何通过 WebSocket 连接发送聊天消息以延长 HttpSession?换句话说:如何将通过 WebSocket 发送的每条消息的 HttpSession 超时计时器重置为 10 分钟?

使用反射方法我从 WebSocket 会话中获取 HttpSession,然后我调用 setMaxInactiveInterval() 方法来重置会话超时计时器,但它不起作用,会话仍然在 10 分钟后超时,即使我在两者之间发送了许多消息。

@OnMessage
public void onMessage(Session session, String message) {
    HttpSession httpSession = getHttpSession(session);
    processMessage(message);
    int initialTimeout = httpSession.getMaxInactiveInterval(); // returns 600 (10 mins) 
    httpSession.setMaxInactiveInterval(initialTimeout);
}

我需要找到 Spring 在每个 API 调用上扩展会话的方式,并且可能以相同的方式进行。有谁知道Spring是怎么做到的?

【问题讨论】:

  • 您能发布您的代码吗?您希望如何维护会话?
  • 刚刚更新了我的原帖
  • 好吧,我明白了,我做错了。 httpSession.setMaxInactiveInterval(initialTimeout) 方法只是设置最大会话过期值,但不会重置会话倒计时计时器。我需要找到不同的解决方案。

标签: java websocket httpsession


【解决方案1】:

由于您在通过 WebSocket 连接发送数据时没有使用 HTTP,因此 HTTP 会话最终会超时,这也会使您的 WebSocket 连接关闭(如JSR-356 中所述)。

在使用 Spring WebSockets 时保持 HTTP 会话活动的简单解决方案是同时使用 Spring Session

【讨论】:

  • 是的,Spring Session 可以,但是我有一个使用 HttpSession 的大项目,来不及重构它。有没有办法只使用 HttpSession ?
  • 在使用 Spring Session 时仍然可以使用 HttpSession,过滤器将 HttpSession 替换为 Spring Session 支持的自定义实现
猜你喜欢
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
相关资源
最近更新 更多