首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

WebSocket 獲取 Session 用戶信息:解碼 URL 編碼的查詢字符串

     編輯:程式設計疑難解答

問題

WebSocket 握手階段無法直接訪問 HttpSession,需從握手請求的 Query String 中解析。

解決方案

// 握手攔截器中
String queryStr = request.getQueryString(); // 如 "token=abc%2Bdef%3D"
String decoded = URLDecoder.decode(queryStr, "UTF-8"); // "token=abc+def="
// 解析 token 並查詢用戶信息存入 WebSocket Session

Spring 整合示例

@Component
public class MyHandshakeInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
                                   WebSocketHandler wsHandler, Map attributes) {
        String query = request.getURI().getQuery();
        if (query != null) {
            String decoded = URLDecoder.decode(query, StandardCharsets.UTF_8);
            // 解析參數,查詢用戶,放入 attributes
            attributes.put("currentUser", userService.findByToken(token));
        }
        return true;
    }
}

注意

必須在握手階段完成用戶識別,後續消息處理直接從 attributes 取用戶對象。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved