天天看点

spring cloud gateway中对websocket进行鉴权

提供一种在网关中鉴权websocket的方式

利用子协议Sec-WebSocket-Protocol的信息

var aWebSocket = new WebSocket(url [, protocols]);

传入鉴权信息,在网关中拦截验证后,改写protocols内容,转化为预先定义好的子协议,注意子协议必须一致才能连接。贴上部分代码作参考:

String header = request.getHeaders().getFirst("Sec-WebSocket-Protocol");
MultiValueMap<String, String> params = request.getQueryParams();
request = request.mutate().header(header, params.getFirst("Authorization")).build();
           
@ServerEndpoint(value = "/test", subprotocols = { "Authorization" }, encoders = {
		WebSocketEn.class }, decoders = { WebSocketDe.class })