我有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是怎么做到的?
答案 0 :(得分:0)
由于您在通过WebSocket连接发送数据时不使用HTTP,因此HTTP会话最终会超时,这也会使您的WebSocket连接关闭(如JSR-356中所述)。
使用Spring WebSockets时保持HTTP会话活动的简单解决方案是使用Spring Session。