当前位置:   article > 正文

websocket链接携带参数_websocket连接带参数

websocket连接带参数

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

  1. var aWebSocket = new WebSocket(url, [protocols]);
  2. url:要连接的URL;这应该是WebSocket服务器将响应的URL。
  3. 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]);

后台获取

  1. package cn.bool.business.framework.websocket.core.security;
  2. import cn.bool.business.framework.security.core.LoginUser;
  3. import cn.bool.business.framework.security.core.filter.TokenAuthenticationFilter;
  4. import cn.bool.business.framework.security.core.util.SecurityFrameworkUtils;
  5. import cn.bool.business.framework.websocket.core.util.WebSocketFrameworkUtils;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.springframework.http.server.ServerHttpRequest;
  8. import org.springframework.http.server.ServerHttpResponse;
  9. import org.springframework.http.server.ServletServerHttpRequest;
  10. import org.springframework.http.server.ServletServerHttpResponse;
  11. import org.springframework.web.socket.WebSocketHandler;
  12. import org.springframework.web.socket.WebSocketSession;
  13. import org.springframework.web.socket.server.HandshakeInterceptor;
  14. import javax.servlet.http.HttpServletRequest;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.util.Map;
  17. /**
  18. * 登录用户的 {@link HandshakeInterceptor} 实现类
  19. *
  20. * 流程如下:
  21. * 1. 前端连接 websocket 时,会通过Sec-WebSocket-Protocol协议传输token
  22. */
  23. public class LoginUserHandshakeInterceptor implements HandshakeInterceptor {
  24.      @Override
  25.      public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
  26.      WebSocketHandler wsHandler, Map<String, Object> attributes) {     // HttpServletRequest req = ((ServletServerHttpRequest) request).getServletRequest();
  27.      // String header = request.getHeader(WS_LOGIN_USER_HEADER);     // 不强转也可以使用     HttpHeaders headers = request.getHeaders();
  28.      List<String> list = headers.get("Sec-WebSocket-Protocol");
  29.      if (CollectionUtil.isNotEmpty(list)) {
  30.           String token = list.get(0);
  31.      }     // 自己项目中登录校验逻辑 TODO
  32.      return true;
  33.      }
  34.      @Override
  35.      public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
  36.      WebSocketHandler wsHandler, Exception exception) {          // 需要将前端自定义协议头Sec-WebSocket-Protocol原封不动返回回去,否则会报错
  37.          HttpServletRequest httpRequest = ((ServletServerHttpRequest) request).getServletRequest();
  38.          HttpServletResponse httpResponse = ((ServletServerHttpResponse) response).getServletResponse();
  39.          if (StringUtils.isNotEmpty(httpRequest.getHeader("Sec-WebSocket-Protocol"))) {
  40.              httpResponse.addHeader("Sec-WebSocket-Protocol", httpRequest.getHeader("Sec-WebSocket-Protocol"));
  41.          }
  42.      }
  43. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/877945
推荐阅读
相关标签
  

闽ICP备14008679号