前端创建的websocket对象
var aWebSocket = new WebSocket(url,['用户token']);
后面的数组可以传多个
后端通过继承ServerEndpointConfig.Configurator类来完成握手
@Configuration
public class WebSocketConfig extends ServerEndpointConfig.Configurator {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
@Override
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
//获取websocket固定头
List<String> list = request.getHeaders().get(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL);
if (list != null){
String s = list.get(0);
String[] split = s.split(",");
List<String> resList = new ArrayList<>();
resList.add(split[0]);
//返回的Sec-WebSocket-Protocol只需要从Sec-WebSocket-Protocol取第一个返回就行,否则会握手失败
response.getHeaders().put(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL,resList);
}
//头返回给前端
super.modifyHandshake(sec, request, response);
}
}
参考文献:Websocket协议的学习、调研和实现_sec-websocket-protocol_Linux后台开发狮的博客-CSDN博客