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.pswp.cn/web/24436.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24436.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24436.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能語音電銷機器人可以做哪些事情?ai語音機器人系統

智能語音電銷機器人軟件的出現&#xff0c;給很多企業都帶來了福利&#xff0c;尤其是電銷企業&#xff0c;不僅工作效率提升了&#xff0c;成本降低了&#xff0c;還能實現智能化管理客戶的出現&#xff0c;給很多企業都帶來了福利&#xff0c;尤其是電銷企業&#xff0c;不僅…

python初學者筆記(八)——數字階乘

#python初學者筆記&#xff08;8&#xff09;——數字階乘 階乘是基斯頓卡曼于 1808 年發明的運算符號,是數學術語,一個正整數的階乘(factorial)是所有小于及等于該數的正整數的積。 下面利用Python編寫數字階乘 ##1.方法一:利用函數的方法&#xff0c;求輸入值的階乘 #coding…

WebAPI 前端開發流程:深度解析與實踐探索

WebAPI 前端開發流程&#xff1a;深度解析與實踐探索 在前端開發的世界里&#xff0c;WebAPI扮演著至關重要的角色&#xff0c;它作為前端與后端溝通的橋梁&#xff0c;確保了數據的流暢傳輸與功能的完整實現。本文將詳細探討WebAPI前端開發流程&#xff0c;從四個方面、五個方…

什么情況下需要配戴助聽器

以下幾種情況需要考慮配戴助聽器&#xff1a; 1、聽力無波動3個月以上的感音神經性聽力障礙。如:先天性聽力障礙、老年性聽力障礙、噪聲性聽力障礙、突聾的穩定期等&#xff0c;均可選配合適的助聽器。 2、年齡方面。使用助聽器沒有嚴格的年齡限制&#xff0c;從出生數周的嬰…

深度學習Week16——數據增強

文章目錄 深度學習Week16——數據增強 一、前言 二、我的環境 三、前期工作 1、配置環境 2、導入數據 2.1 加載數據 2.2 配置數據集 2.3 數據可視化 四、數據增強 五、增強方式 1、將其嵌入model中 2、在Dataset數據集中進行數據增強 六、訓練模型 七、自定義增強函數 一、前言…

Geoserver源碼解讀一(環境搭建)

一、Github地址 https://github.com/geoserver/geoserver 1.1 克隆代碼 git clone https://github.com/geoserver/geoserver.git 1.2 選擇版本 版本選擇參考我的上一篇文章 Geoserver 以及 Geotools各版本和jdk版本對照表 此處我選擇的是兼容jdk8的最后一個版本 git che…

netty+springboot+vue聊天室(需要了解netty)

先看看這個使用websocket實現的聊天室&#xff0c;因為前端是使用websocket&#xff0c;和下面的demo的前端差不多就不解釋實現原理&#xff0c;所以建議還是看看(要是會websocket的大佬請忽略) springbootwebsocketvue聊天室 目錄 一、實現內容二、代碼實現1.后端2.前端源碼…

html+CSS+js部分基礎運用17

在圖書列表中&#xff0c;為書名“零基礎學JavaScript”和“HTML5CSS3精彩編程200例”添加顏色。&#xff08;請用class或style屬性實現&#xff09;&#xff0c;效果如下圖1所示&#xff1a; 圖1 圖書列表 Class和style的綜合應用。&#xff08;1&#xff09;應用class的對象、…

命令行打包最簡單的android項目從零開始到最終apk文件

準備好需要的工具 AndroidDevTools - Android開發工具 Android SDK下載 Android Studio下載 Gradle下載 SDK Tools下載 jdk的鏈接我就不發出來,自己選擇,我接下來用的是8版本的jdk和android10的sdk sdk的安裝和環境變量的配置 sdk tool壓縮包打開后是這樣子,打開sdk mana…

高防CDN是如何應對DDoS和CC攻擊的

高防CDN&#xff08;內容分發網絡&#xff09;主要通過分布式的網絡架構來幫助網站抵御DDoS&#xff08;分布式拒絕服務&#xff09;和CC&#xff08;挑戰碰撞&#xff09;攻擊。 下面是高防CDN如何應對這些攻擊的詳細描述&#xff1a; 1. DDoS攻擊防護 DDoS攻擊通過大量的惡…

SREC用什么軟件編程:全面解析與編程工具選擇

SREC用什么軟件編程&#xff1a;全面解析與編程工具選擇 在嵌入式系統開發中&#xff0c;SREC文件格式扮演著至關重要的角色&#xff0c;用于存儲和傳輸二進制數據。然而&#xff0c;對于許多初學者和開發者來說&#xff0c;如何選擇合適的軟件來編寫SREC文件卻是一個令人困惑…

STM32串口DMA 空閑中斷使用筆記

這里只記錄注意要點&#xff1a; 1&#xff0c;要開啟串口 全局中斷 和對應的接收DMA 中斷&#xff0c;兩個中斷必須同時開 2&#xff0c;裸機程序需要在主循環外調用一次 這個函數 HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE); 3&#xff0c;要在串口中…

【動態規劃-BM71 最長上升子序列(一)】

題目 BM71 最長上升子序列(一) 分析 dp[i] 考慮到下標i&#xff0c;其組成的最長上升子序列長度 可以用動態規劃的原因&#xff1a; 到i的結果可以由到j &#xff08;j<i) 的結果推出&#xff0c;只需要判斷下標j對應的數字是否比下標i 對應的字母小即可 注意&#xf…

vs2013 - 打包

文章目錄 vs2013 - 打包概述installshield2013limitededitionMicrosoft Visual Studio 2013 Installer Projects選擇哪種來打包? 筆記VS2013打包和VS2019打包的區別打包工程選擇view打包工程中單擊工程名稱節點&#xff0c;就可以在屬性框中看到要改的屬性(e.g. 默認是x86, 要…

「動態規劃」當小偷改行去當按摩師,會發生什么?

一個有名的按摩師會收到源源不斷的預約請求&#xff0c;每個預約都可以選擇接或不接。在每次預約服務之間要有休息時間&#xff0c;因此她不能接受相鄰的預約。給定一個預約請求序列&#xff0c;替按摩師找到最優的預約集合&#xff08;總預約時間最長&#xff09;&#xff0c;…

滲透測試之內核安全系列課程:Rootkit技術初探(三)

今天&#xff0c;我們來講一下內核安全&#xff01; 本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01; 目前&#xff0c;在滲透測試領域&#xff0c;主要分為了兩個發展方向&#xff0c;分別為Web攻防領域和PWN&#xff08;二進制安全&#xff09;攻防領域。在…

Linux安裝RocketMQ教程【帶圖文命令巨詳細】

巨詳細Linux安裝Nacos教程RocketMQ教程 1、檢查殘留版本2、上傳壓縮包至服務器2.1壓縮包獲取2.2創建相關目錄 3、安裝RocketMQ4、配置RocketMQ4.1修改runserver.sh和runbroker.sh啟動腳本4.2新增broker.conf配置信息4.3啟動關閉rocketmq4.4配置開機自啟動&#xff08;擴展項&am…

AI Agentic Design Patterns with AutoGen(下):工具使用、代碼編寫、多代理群聊

文章目錄 四、工具使用: 國際象棋游戲4.1 準備工具4.2 創建兩個棋手代理和棋盤代理4.3 注冊工具到代理4.4 創建對話流程&#xff0c;開始對話4.5 增加趣味性&#xff1a;加入閑聊 五、代碼編寫&#xff1a;財務分析5.1導入和配置代碼執行器5.2 創建 代碼執行/編寫 代理5.3 定義…

win10重裝系統?電腦系統重裝一鍵清晰,干貨分享!

在電腦的使用過程中&#xff0c;由于各種原因&#xff0c;我們可能會遇到系統崩潰、運行緩慢或者出現各種難以解決的問題。這時&#xff0c;重裝系統往往是一個有效的解決方案。今天&#xff0c;我們就來詳細介紹一下如何在Win10環境下進行系統的重裝&#xff0c;幫助大家輕松解…

【三十三】springboot+序列化實現返回值脫敏和返回值字符串時間格式化問題

互相交流入口地址 整體目錄&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定義swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP實現日志操作 【…