当WebSocket请求获取请求头Sec-WebSocket-Protocol不为空时,需要返回给前端相同的响应,所以就需要处理
解决:在 WebSocketConfig 中新增?modifyHandshake方法,用来获取请求头和为返回响应赋值
?
modifyHandshake方法
public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
//获取请求头
request.getHeaders().get("Sec-WebSocket-Protocol").get(0);
//当Sec-WebSocket-Protocol请求头不为空时,需要返回给前端相同的响应
response.getHeaders().put("Sec-WebSocket-Protocol",list);
/**
*获取请求头后的逻辑处理
*/
super.modifyHandshake(sec, request, response);
}
关键点:需要在websocketserver的@ServerEndpoint注解中加上configurator = WebSocketConfig.class,也就是上面那个方法存在的配置文件中
@Component
@ServerEndpoint(value ="/webSocket/{userId}",encoders = { ServerEncoder.class },configurator = WebSocketConfig.class)
public class WebSocketServer {
/**
* 连接开始调用的方法
*/
@OnOpen
public void onOpen(Session session) throws Exception {}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(@PathParam(value = "userId") Integer userId,Session session) {}
}
|