From 22f9bf7165e2b331d050f3044dd399c7fdfc3914 Mon Sep 17 00:00:00 2001 From: laodaming <11058467+laudamine@user.noreply.gitee.com> Date: Wed, 18 Oct 2023 15:28:47 +0800 Subject: [PATCH] fix --- .../internal/logic/datatransferlogic.go | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server/websocket/internal/logic/datatransferlogic.go b/server/websocket/internal/logic/datatransferlogic.go index 003ddf06..b7b1261e 100644 --- a/server/websocket/internal/logic/datatransferlogic.go +++ b/server/websocket/internal/logic/datatransferlogic.go @@ -104,14 +104,28 @@ type wsConnectItem struct { // 请求建立连接,升级websocket协议 func (l *DataTransferLogic) DataTransfer(req *types.DataTransferReq, w http.ResponseWriter, r *http.Request) { //把子协议携带的token设置到标准token头信息中 - token := r.Header.Get("Sec-Websocket-Protocol") + tokens := r.Header.Get("Sec-Websocket-Protocol") oldWid := req.Wid oldWid = strings.Trim(oldWid, " ") //有token是正常用户,无则是白板用户,也可以连接 - if token != "" { + if tokens != "" { + token := "" + debugToken := "" + tokenSlice := strings.Split(tokens, ",") + switch len(tokenSlice) { + case 1: + token = strings.Trim(tokenSlice[0], " ") + case 2: + token = strings.Trim(tokenSlice[0], " ") + debugToken = strings.Trim(tokenSlice[1], " ") + r.Header.Set("Debug-Token", "Bearer "+debugToken) + default: + logx.Error("invalid ws token:", tokens) + return + } r.Header.Set("Authorization", "Bearer "+token) //设置Sec-Websocket-Protocol - upgrader.Subprotocols = []string{token} + upgrader.Subprotocols = []string{tokens} } //判断下是否火狐浏览器(获取浏览器第一条消息返回有收不到的bug需要延迟1秒) userAgent := r.Header.Get("User-Agent")