1.环境描述

JeecgBoot3.0

2.websocket权限认证

  • 在shiroConfig.java代码中注释掉
filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告
  • 配置拦截器
package org.jeecg.config.websocket;import org.apache.commons.lang.StringUtils;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;@Component
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {@Overridepublic boolean beforeHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler wsHandler,Map<String, Object> attributes) throws Exception {return super.beforeHandshake(request, response, wsHandler, attributes);}@Overridepublic void afterHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler wsHandler,Exception ex) {HttpServletRequest httpServletRequest = ((ServletServerHttpRequest)request).getServletRequest();HttpServletResponse httpServletResponse = ((ServletServerHttpResponse)response).getServletResponse();if(StringUtils.isNotEmpty(httpServletRequest.getHeader("sec-websocket-protocol")))httpServletResponse.addHeader("sec-websocket-protocol", httpServletRequest.getHeader("sec-websocket-protocol"));super.afterHandshake(request, response, wsHandler, ex);}
}
  • 修改前端的请求,在HeaderNotice.vue中
let token = Vue.ls.get(ACCESS_TOKEN)
var url = window._CONFIG['domianURL'].replace("https://","wss://").replace("http://","ws://")+"/websocket/"+userId +"?token="+token

3. HashMap不是线程安全的,可以改为线程安全的map,如下

 private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();

4.重复发送问题

  • 原有的代码为:
     /*** 服务器端推送消息*/public void pushMessage(String message) {try {webSockets.forEach(ws -> ws.session.getAsyncRemote().sendText(message));} catch (Exception e) {e.printStackTrace();}}@OnMessagepublic void onMessage(String message) {//todo 现在有个定时任务刷,应该去掉log.debug("【websocket消息】收到客户端消息:" + message);JSONObject obj = new JSONObject();//业务类型obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK);//消息内容obj.put(WebsocketConst.MSG_TXT, "心跳响应");for (WebSocket webSocket : webSockets) {webSocket.pushMessage(message);}}
  • 可将OnMessage函数改为:
    @OnMessagepublic void onMessage(String message) {//todo 现在有个定时任务刷,应该去掉log.debug("【websocket消息】收到客户端消息:" + message);JSONObject obj = new JSONObject();//业务类型obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK);//消息内容obj.put(WebsocketConst.MSG_TXT, "心跳响应");for (WebSocket webSocket : webSockets) {//webSocket.pushMessage(message);webSocket.session.getAsyncRemote().sendText(message);}}

JeecgBoot关于websocket的改进方案相关推荐

  1. 关于consistent hash的思考及改进方案

    这里默认读者已经知道了一致性hash算法的原理. 1. 为什么在某台机器宕机之后consistent hash算法能够避免所有或者大部分key重新hash? 首先需要弄清的是,如果某一台机器宕机之后, ...

  2. [分享]技术改进方案模板

    来自: http://www.cnblogs.com/raol/archive/2013/04/25/program_template.html 关于XX改进方案 现状描述: 不满意的地方: 1. 2 ...

  3. 图像检索:图像拷贝检索PHash改进方案

    感知哈希是用来做图像拷贝检索(Copy Detection)最容易操作的一种方法,实际上除了感知哈希.均值哈希,还有很多的从图像本身出发计算出来的图像哈希值,在OpenCV 3.3及其以后的版本中,包 ...

  4. 十大经典排序算法(附代码、动画及改进方案)

    前言说明 十大排序算法可以说是每个程序员最早接触的也是最重要的算法,这一块必须要非常熟练的掌握,应该要理解每种排序的思想,对各个排序的性能的了解也是基础且重要的.为了方便自己和大家学习,决定整合成一篇 ...

  5. 欢迎广大编程爱好者为MyPage网站提供改进方案

    MyPage网站现投资一大笔资金用于网站的改进,欢迎广大编程爱好者为其提供改进的方案.每个改进的方案一经采纳后将根据方案的优秀程度得到100-500元不等的经费资助.如果方案特别优秀,MyPage网站 ...

  6. 某项目608版本投产前验收问题报告与后续研发流程改进方案

    一.问题描述及问题分析 1.问题描述 608版本计划于6.30日上线,该版本在投产前的验证环节发现项目详情中合同执行表有内容,而项目信息下载的合同执行表却为空. 2.原因分析 合同执行表下载逻辑中,对 ...

  7. DTcms-【改进】-我自己的改进方案

    我自己的改进方案   1. 建议应该将"附加信息"和附件的图片进行分开的存放 单台服务器的图片分文件夹存放 主从服务器图片的分文件夹存放   在删除某一信息[文章信息  下载信息 ...

  8. 对于XL改进方案的初步分析

    根据前一篇博客中统计的单个事务耗时分布,我们发现每个请求在datanode执行的时间与PG执行时间几乎一样. 之前测试的是短事务,一个事务一个insert语句写入一条数据,这种场景对于xl来说没有什么 ...

  9. 【思考进步】2022年1月读书思考和改进方案

    一.进度总结 先给出结论,按之前预想的进度来说,是失败的. 再次基础上,我经过反思得出一些结论和后续建设性的改进方案,希望给自己和想读书的各位一些启发. 二.理想进度和实际进度的差别 首先是进度上的严 ...

最新文章

  1. 传授“带权重的负载均衡实现算法”独家设计思路!
  2. Mysql常用数据类型详细说明及实例说明(学习笔记一)
  3. iso8601时间格式_ISO8601与dayjs的使用
  4. Python学习笔记:错误,测试,调试(起)
  5. MySQL使用EXPLAIN分析SQL
  6. php安卓直播抓取,hls,android_安卓大部分浏览器播放HLS协议直播流会从头开始,hls,android,ffmpeg,m3u8 - phpStudy...
  7. mysql 内部安全性_MySQL数据库的内部以及外部安全性简介
  8. 《python深度学习》总结与感想
  9. vmlogin效果怎么样?亚马逊防关联超级浏览器,电商多账号管理神器
  10. 新手坐高铁怎么找车厢_新手坐高铁怎么找车厢
  11. 用友U9破解装备制造业信息化世界级难题
  12. 什么是ADB,什么是MC
  13. mfc chartctrl 饼状图编写_南瓜糯米饼:外酥里糯,吃到嘴巴里,真是舌尖上的享受...
  14. 函数定义涉及的三要素C语言,(函数定义与三要素答案.doc
  15. 小白成长记(三、SqlSugar的sum用法)
  16. Cadence PCB仿真使用Allegro PCB SI 创建含差分对网络元器件的IBIS模型图文教程
  17. python云盘私有云_GitHub - 0x2642/Umi-Chest: 一个基于python的私有云实验项目
  18. springcloud-微服务
  19. 《走出自己的围城-2017年终总结》
  20. 2021-DASCTF-三月赛-Writeup

热门文章

  1. Python订票系统这才是看电影选座的正确方法,原来我们都上当了
  2. Python PEP
  3. 「JCVI教程」如何基于物种的CDS的blast结果绘制点图(dotplot)
  4. 电脑故障维修判断指导大全(3)
  5. 将打开在扩展显示器的界面移动到主显示器中的方法
  6. poj1008 -- 玛雅历
  7. 核心交换机链路聚合、冗余、堆叠、热备份
  8. git push代码时自动化添加reviewer
  9. 什么是编码?什么是解码?
  10. 计算广告学习笔记1.2 广告的基础知识-广告的有效性模型