2017-07-24 80 views
0

我有Java Spring应用程序,它具有通过WebSocket提供的Chat端点。用户使用API​​调用登录并且会话超时10分钟。Websocket聊天消息不会延长HttpSession

为了开始聊天,我必须连接到WebSocket端点。它没有连接,没有问题,但事情是这样的:从客户端发送的每个聊天消息不会延长登录HttpSession,所以在10分钟后超时。

如何通过WebSocket连接延长HttpSession使聊天消息?换句话说:如何将HttpSession超时定时器重置为通过WebSocket发送的每条消息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); 
} 

我需要找到春天的方式扩展在每个API调用了会议,并可能做同样的方式。有谁知道Spring是怎么做到的?

+0

请您发布您的代码?你想如何保持你的会议? –

+0

刚刚更新了我的原始文章 –

+0

好吧,我刚刚明白,我做错了。 httpSession.setMaxInactiveInterval(initialTimeout)方法只是设置最大会话到期值,但不会重置会话倒计时器。我需要找到不同的解决方案。 –

回答

0

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

当使用Spring WebSockets时,一个简单的解决方案将使用Spring Session

+0

是的春季会议是可行的,但我有一个使用HttpSession的大项目,太迟而无法重构它。有没有办法只使用HttpSession? –

+0

在使用Spring Session时仍然可以使用HttpSession,过滤器会用Spring Session支持的自定义实现替换HttpSession –