2017-07-24 77 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 –