【发布时间】: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