当前位置: 首页 > news >正文

websocket链接携带参数

前端创建链接时官方提供的构造函数

var aWebSocket = new WebSocket(url, [protocols]);
url:要连接的URL;这应该是WebSocket服务器将响应的URL。
protocols:可选;一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定子协议,这样单个服务器可以实现多个WebSocket子协议(例如,您可能希望一台服务器能够根据指定的协议(protocol)处理不同类型的交互)。如果不指定协议字符串,则假定为空字符串。

websocket携带参数支持两种方式

在url后面拼接,类似以get请求

var socket = new WebSocket('ws://example.com/socket?token=' + YOUR_TOKEN);

使用protocols,token不要有特殊符号之类,逗号,横杠等也不要有,要不前端构造函数会报错

var webSocket = new WebSocket(url,[token]);

后台获取

package cn.bool.business.framework.websocket.core.security;import cn.bool.business.framework.security.core.LoginUser;
import cn.bool.business.framework.security.core.filter.TokenAuthenticationFilter;
import cn.bool.business.framework.security.core.util.SecurityFrameworkUtils;
import cn.bool.business.framework.websocket.core.util.WebSocketFrameworkUtils;
import org.apache.commons.lang3.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.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.server.HandshakeInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;/**
* 登录用户的 {@link HandshakeInterceptor} 实现类
*
* 流程如下:
* 1. 前端连接 websocket 时,会通过Sec-WebSocket-Protocol协议传输token
*/
public class LoginUserHandshakeInterceptor implements HandshakeInterceptor {@Overridepublic boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,WebSocketHandler wsHandler, Map<String, Object> attributes) {     // HttpServletRequest req = ((ServletServerHttpRequest) request).getServletRequest();// String header = request.getHeader(WS_LOGIN_USER_HEADER);     // 不强转也可以使用     HttpHeaders headers = request.getHeaders();List<String> list = headers.get("Sec-WebSocket-Protocol");if (CollectionUtil.isNotEmpty(list)) {String token = list.get(0);}     // 自己项目中登录校验逻辑 TODOreturn true;}@Overridepublic void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,WebSocketHandler wsHandler, Exception exception) {          // 需要将前端自定义协议头Sec-WebSocket-Protocol原封不动返回回去,否则会报错HttpServletRequest httpRequest = ((ServletServerHttpRequest) request).getServletRequest();HttpServletResponse httpResponse = ((ServletServerHttpResponse) response).getServletResponse();if (StringUtils.isNotEmpty(httpRequest.getHeader("Sec-WebSocket-Protocol"))) {httpResponse.addHeader("Sec-WebSocket-Protocol", httpRequest.getHeader("Sec-WebSocket-Protocol"));}}}

http://www.lryc.cn/news/366705.html

相关文章:

  • 【C++进阶】深入STL之list:模拟实现深入理解List与迭代器
  • 技术管理之巅—如何从零打造高质效互联网技术团队阅读体验
  • 机器学习与数据挖掘知识点总结(一)
  • 行心科技中禄松波携手,开启智能健康新时代
  • 前端多人项目开发中,如何保证CSS样式不冲突?
  • 【YOLOv10改进[CONV]】使用DualConv二次创新C2f模块实现轻量化 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发
  • 基于SSM+Jsp的高校信息资源共享平台
  • 软件测试--Linux快速入门
  • module ‘django_cas_ng.views‘ has no attribute ‘login‘
  • CW32F030K8T7单片机在即热式热水器的应用介绍
  • HTML静态网页成品作业(HTML+CSS)—— 美食湘菜介绍网页(5个页面)
  • 使用redis构建简单的社交网站
  • 【Java面试】九、微服务篇-SpringCloud(上)
  • Python 树状数组
  • 【QEMU中文手册】2.2 调用方式(持续更新中)
  • (函数)判断一句话中最长的单词(C语言)
  • QT5.5.0中使用lambda表达式时遇到的问题
  • 【Go语言精进之路】构建高效Go程序:了解切片实现原理并高效使用
  • Python与C语言:深入探索两者的奥秘与差异
  • 图像编解码器在AI绘画中的革新作用
  • SecureCRT[po破] for Mac SSH终端操作工具[解] 安装教程
  • 【大数据架构】基于流式数据的大数据架构升级
  • OpenCV中的圆形标靶检测——斑点检测算法(二)
  • 网线制作(双绞线+水晶头)——T568B标准
  • 湖南源点(市场研究咨询)如何产出更加有意义的竞品调研
  • Qt/C++音视频开发76-获取本地有哪些摄像头名称/ffmpeg内置函数方式
  • 09 platfrom 设备驱动
  • 【C#】C#读写Excel文件
  • 数据流图(DFD)绘制规范
  • 有待挖掘的金矿:大模型的幻觉之境