如何在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());

 

你可能感兴趣的:(websocket)