java使用Websocket获取HttpSession出现的问题与解决
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出现的问题与解决相关推荐
- websocket获取httpsession报NullPointerException解决办法
最近在写个websocket程序时发现了个很严重的问题,就是按照配置ServerEndpointConfig.Configurator public class GetHttpSessionConfi ...
- java resource file_Java 获取Resource目录下的文件解决办法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Java 获取Resource目录下的 文件 有两种方式: Java代码中的类,要获取Resource资源 文件目录 下文件 绝对路径寻址 注意这个 / ...
- java使用websocket,并且获取HttpSession,源码分析
一:本文使用范围 此文不仅仅局限于spring boot,普通的spring工程,甚至是servlet工程,都是一样的,只不过配置一些监听器的方法不同而已. 本文经过作者实践,确认完美运行. 二:Sp ...
- java 获取httpsession_java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- WebSocket之获取HttpSession
由于WebSocket与Http协议的不同,故在使用常用的HttpSession方面就存在了一些问题.通过google翻阅到了在onOpen方法下使用HttpSession的方法. 新建一个GetHt ...
- Java版WebSocket消息推送系统搭建
Java版WebSocket消息推送系统搭建 最近在做消息推送,网上查了一些资料,开始想的是用MQ来做,后面发现用WebSocket来做的话感觉应该要简单点,话不多说,准备撸代码. 后端核心代码 /* ...
- java 读取project_java project 和 java web project 获取路径问题
java project中如何获得相对路径(编译后的目录是在/bin目录下)(一般图片 这些目录放在 项目目录下,与src同级) 在static方法中,用 String path = Test.cla ...
- java根据sessionid获取session
java根据sessionid获取session import java.util.HashMap; import java.util.Map;import javax.servlet.http.Ht ...
- 手把手教你用JAVA调用Websocket实现“声音转换”功能(变声)标贝科技
手把手教你用JAVA调用Websocket实现"声音转换"功能(变声)标贝科技 前言 什么是声音转换? 基于深度学习和迁移学习技术,精准将原说话人的声音转换为目标说话人,同时保留原 ...
最新文章
- 一致性哈希算法以及其PHP实现
- linux定时运行命令脚本——crontab
- 第21章:MongoDB-聚合操作--聚合管道--$geoNear
- django安装mysql驱动_django安装mysql驱动
- HDU - 1427 速算24点(dfs)
- Android学习笔记:TabHost 和 FragmentTabHost
- 利用Python爬取网易上证所有股票数据(代码
- 在Zuul中设置服务访问限流
- 视频客观质量评价工具:MSU Video Quality Measurement Tool
- 项目实训12——解析建表的SQL语句
- BSC-币安智能链主网节点搭建(详细步骤)
- 什么是Winsock WSAData ?
- 转化二进制数的c语言程序,c语言实现二进制数转换为十进制
- 2万行java代码的系统_PublicCMS: 200万行代码修改 打造安全快速的java cms 轻松支撑千万数据、千万PV;目前已经拥有全球0.0002%的用户,诸多明星网站案例。...
- excel表格怎么恢复?常见的恢复方法
- 计算机唤醒休眠蓝屏,分享win10睡眠唤醒就蓝屏的解决办法
- 【docker】 docker-server启动重启关闭
- Shared UI Mesh内存占用过高
- matlab revch,matlab学习1
- 【枚举找规律】记一次找规律题 埃匹希斯水晶
热门文章
- webview 禁用横竖屏切换_X5内核WebView横屏切换崩溃
- python with open as yaml_python – pyyaml并仅使用字符串引号
- linux定时执行任务命令,crontab(linux下定时执行任务命令)
- redis常用命令getex_Redis 常用命令篇(末尾含不常用)
- 模块 datetime
- unbantu安装 mysql --- 百度云
- @Aspect @around 多个参数
- mvc:view-controller
- xshell 端口转发
- MathType几个常用字体的名称