Websocket聊天消息不会延长HttpSession

时间:2017-07-24 18:41:31

标签: java websocket httpsession

我有Java Spring Application,它通过WebSocket提供Chat端点。用户使用API​​调用和会话登录超时10分钟。

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

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

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

@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是怎么做到的?

1 个答案:

答案 0 :(得分:0)

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

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