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

时间: 2024-10-16 23:23:00

如何在WebSocket类中访问Session的相关文章

MFC如何在CMainFrame类中访问CxxxView视图类中的成员

在视图类中,我们可以通过调用AfxGetMainWnd()函数得到框架窗口的指针. 注意,需要在view类实现部分添加#include "MainFrm.h". 1 CMainFrame* pMFram = (CMainFrame*)AfxGetMainWnd(); 如果想在框架窗口中想调用CxxxView类中的函数,也需要得到相应View视图类的指针. 但是需要注意,这里不仅得包含xxxView.h,还需要包含xxxDoc.h头文件, 还需要注意头文件的顺序,先包含Doc.h,再包含

关于“在本类中访问本类私有静态变量”的一点疑惑解析

关于"在本类中访问本类私有静态变量"的一点疑惑解析 代码如下: public class StaticVar { private static int x = 100; public static void main(String[] args) { StaticVar var1 = new StaticVar(); var1.x++; StaticVar var2 = new StaticVar(); var2.x++; StaticVar.x++; System.out.print

解决在XXXXService中访问session、request、params、servletcontext等等问题

在最近的开发过程中,遇到了在service中访问session.request.params等对象中的一些内容,解决方法如下 import org.codehaus.groovy.grails.web.util.WebUtilsimport org.springframework.web.context.request.RequestContextHolder class WebUtilTools {    def static getRequest(){        def webUtils

关于C++类中访问权限的若干疑问(虚函数访问权限)

下面这样一个程序:(以下程序都是在VS2010下实现) 1: class Base 2: { 3: public: 4: virtual void func() 5: { 6: cout<<"Base virtual func"<<endl; 7: } 8: }; 9: 10: class Derived: public Base 11: { 12: private: 13: virtual void func() 14: { 15: cout<<&

spring在普通类中获取session和request

在使用spring时,经常需要在普通类中获取session,request等对像.比如一些AOP拦截器类,在有使用struts2时,因为struts2有一个接口使用org.apache.struts2.ServletActionContext即可很方便的取到session对像.用法:ServletActionContext.getRequest().getSession(); 但在单独使用spring时如何在普通类中获取session,reuqest呢?首先要在web.xml增加如下代码: <l

在一般处理文件中访问Session需要添加IRequiresSessionState

在IHttpHandler 使用Session 通常我们经常,通过session判定用户是否登录.还有一些临时的.重要的数据也尝尝存放在Session中. 在页面我们很容易的得到Session的值,但在类中就会遇到一些问题.也知道通过下面的方法得到. System.Web.HttpContext.Current.Session["userinfo"]; 但是今天此种方法也失灵了.在做一个小应用时,需要实现IHttpHandler,同时也需要用到用户的标识.但是在这个类中怎么也不能找到S

在一般处理文件中访问Session需要添加IRequiresSessionState(转载)

原文:http://blog.csdn.net/cdsnaspnet/article/details/5695625s 通常我们经常,通过session判定用户是否登录.还有一些临时的.重要的数据也尝尝存放在Session中. 在页面我们很容易的得到Session的值,但在类中就会遇到一些问题.也知道通过下面的方法得到. System.Web.HttpContext.Current.Session["userinfo"]; 但是今天此种方法也失灵了.在做一个小应用时,需要实现IHttp

ASP.NET ASHX中访问Session

默认,在ashx文件中无法使用Session,直接获取context.Session只能取得null. 解决办法: 添加命名空间 using System.Web.SessionState 的引用 让这个General Handler类实现IRequiresSessionState接口 然后再用context.Session或HttpContext.Current.Session就能获取Session

如何在java类中获取javaWeb的根路径

我们有时候需要在java类中(包括util类等)获取web的根路径,可以通过class类路径来获取: public static String getRealPath(Class clazz) { String url = clazz.getResource("").getPath(); int displace = url.indexOf("WEB-INF"); StringBuffer buffer = new StringBuffer(); for (int