首页 > 代码库 > 如何在WebSocket类中访问Session

如何在WebSocket类中访问Session

我最近正在做一个基于websocket的webQQ,最后代码会开源带github上,所以过程中我就不贴所有的代码啦~就贴问题的关键。

首先先搞清一个流程: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类中访问Session