如何在WebSocket類中訪問Session


我最近正在做一個基於websocket的webQQ,最后代碼會開源帶github上,所以過程中我就不貼所有的代碼啦~就貼問題的關鍵。

我在WebSocket里發消息的時候需要用到session,因為在登陸時我把用戶信息全丟session里了,於是問題來了,該如何在WebSocket類中訪問Session呢?

首先先搞清一個流程:WebSocket在建立連接時第一步其實是以HTTP協議的面目進行握手的:

1.客戶端發送websocket請求,此時發送的還是http包。

2.如果服務器支持websocket,那么就將http轉變為websocket。

3.此時連接建立,服務器和客戶端可以雙向實時進行通信。

那么我們該怎么拿到HttpSession呢?觀察上面整個過程發現只有在第一步的時候才能得到,於是乎websocket給了我們一個方法介入websocket初始化的過程。

首先要繼承ServerEndpointConfig,並實現 modifyHandshake方法:

import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
 
public class GetHttpSessionConfigurator extends ServerEndpointConfig.Configurator
{
    @Override
    public void modifyHandshake(ServerEndpointConfig config, 
                                HandshakeRequest request, 
                                HandshakeResponse response)
    {
        HttpSession httpSession = (HttpSession)request.getHttpSession();
        config.getUserProperties().put(HttpSession.class.getName(),httpSession);
    }
}

然后在實現ServerEndPoint時,增加configurator的參數,再這樣獲取即可:

HttpSession httpSession = (HttpSession) config.getUserProperties() .get(HttpSession. class .getName());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM