websocket的写法就不多说了,主要记一记其中出现的问题

1.获取不到httpSession

解决办法:先重写握手方法,将httpsession放入ServerEndpointConfig.getUserProperties()方法返回的map中

 1 import javax.servlet.http.HttpSession;
 2 import javax.websocket.HandshakeResponse;
 3 import javax.websocket.server.HandshakeRequest;
 4 import javax.websocket.server.ServerEndpointConfig;
 5 import javax.websocket.server.ServerEndpointConfig.Configurator;
 6
 7 /**
 8  * 继承websocket配置类,将httpsession放入ServerEndpointConfig的map中
 9  * 从而达到使websocket对象可以访问到httpsession中的对象
10  */
11 public class GetHttpSessionConfigurator extends Configurator{
12
13     /**
14      * 重写修改握手方法
15      * @param sec
16      * @param request
17      * @param response
18      */
19     @Override
20     public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
21         HttpSession httpSession = (HttpSession)request.getHttpSession();
22         sec.getUserProperties().put(HttpSession.class.getName(),httpSession);
23     }
24 }

然后在注解@ServerEndpoint加入configurator的配置

1 @ServerEndpoint(value="/websocket",configurator=GetHttpSessionConfigurator.class)

此时已经可以获取到httpsession了。

然而如果我没有登录,反而需要临时登录这种情况呢?根据上述demo,会发现根本没办法连接上,一直是close状态

下面是对这个问题的解决

2、未登录用户连接WebSocket,一直close状态的情况解决:

解决方法是建立个请求监听器
 1 @WebListener
 2 public class RequestListener implements ServletRequestListener {
 3
 4     public void requestInitialized(ServletRequestEvent sre)  {
 5         //将所有request请求都携带上httpSession
 6         ((HttpServletRequest) sre.getServletRequest()).getSession();
 7
 8     }
 9     public RequestListener() {
10         // TODO Auto-generated constructor stub
11     }
12
13     public void requestDestroyed(ServletRequestEvent arg0)  {
14          // TODO Auto-generated method stub
15     }
16 }

问题解决。

转载于:https://www.cnblogs.com/hellxz/p/8063867.html

java使用Websocket获取HttpSession出现的问题与解决相关推荐

  1. websocket获取httpsession报NullPointerException解决办法

    最近在写个websocket程序时发现了个很严重的问题,就是按照配置ServerEndpointConfig.Configurator public class GetHttpSessionConfi ...

  2. java resource file_Java 获取Resource目录下的文件解决办法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Java 获取Resource目录下的 文件 有两种方式: Java代码中的类,要获取Resource资源 文件目录 下文件 绝对路径寻址 注意这个 / ...

  3. java使用websocket,并且获取HttpSession,源码分析

    一:本文使用范围 此文不仅仅局限于spring boot,普通的spring工程,甚至是servlet工程,都是一样的,只不过配置一些监听器的方法不同而已. 本文经过作者实践,确认完美运行. 二:Sp ...

  4. java 获取httpsession_java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  5. WebSocket之获取HttpSession

    由于WebSocket与Http协议的不同,故在使用常用的HttpSession方面就存在了一些问题.通过google翻阅到了在onOpen方法下使用HttpSession的方法. 新建一个GetHt ...

  6. Java版WebSocket消息推送系统搭建

    Java版WebSocket消息推送系统搭建 最近在做消息推送,网上查了一些资料,开始想的是用MQ来做,后面发现用WebSocket来做的话感觉应该要简单点,话不多说,准备撸代码. 后端核心代码 /* ...

  7. java 读取project_java project 和 java web project 获取路径问题

    java project中如何获得相对路径(编译后的目录是在/bin目录下)(一般图片 这些目录放在 项目目录下,与src同级) 在static方法中,用 String path = Test.cla ...

  8. java根据sessionid获取session

    java根据sessionid获取session import java.util.HashMap; import java.util.Map;import javax.servlet.http.Ht ...

  9. 手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)标贝科技

    手把手教你用JAVA调用Websocket实现"声音转换"功能(变声)标贝科技 前言 什么是声音转换? 基于深度学习和迁移学习技术,精准将原说话人的声音转换为目标说话人,同时保留原 ...

最新文章

  1. 一致性哈希算法以及其PHP实现
  2. linux定时运行命令脚本——crontab
  3. 第21章:MongoDB-聚合操作--聚合管道--$geoNear
  4. django安装mysql驱动_django安装mysql驱动
  5. HDU - 1427 速算24点(dfs)
  6. Android学习笔记:TabHost 和 FragmentTabHost
  7. 利用Python爬取网易上证所有股票数据(代码
  8. 在Zuul中设置服务访问限流
  9. 视频客观质量评价工具:MSU Video Quality Measurement Tool
  10. 项目实训12——解析建表的SQL语句
  11. BSC-币安智能链主网节点搭建(详细步骤)
  12. 什么是Winsock WSAData ?
  13. 转化二进制数的c语言程序,c语言实现二进制数转换为十进制
  14. 2万行java代码的系统_PublicCMS: 200万行代码修改 打造安全快速的java cms 轻松支撑千万数据、千万PV;目前已经拥有全球0.0002%的用户,诸多明星网站案例。...
  15. excel表格怎么恢复?常见的恢复方法
  16. 计算机唤醒休眠蓝屏,分享win10睡眠唤醒就蓝屏的解决办法
  17. 【docker】 docker-server启动重启关闭
  18. Shared UI Mesh内存占用过高
  19. matlab revch,matlab学习1
  20. 【枚举找规律】记一次找规律题 埃匹希斯水晶

热门文章

  1. webview 禁用横竖屏切换_X5内核WebView横屏切换崩溃
  2. python with open as yaml_python – pyyaml并仅使用字符串引号
  3. linux定时执行任务命令,crontab(linux下定时执行任务命令)
  4. redis常用命令getex_Redis 常用命令篇(末尾含不常用)
  5. 模块 datetime
  6. unbantu安装 mysql --- 百度云
  7. @Aspect @around 多个参数
  8. mvc:view-controller
  9. xshell 端口转发
  10. MathType几个常用字体的名称