Netty实现WebSocket,URI参数问题
1、问题:
Netty对WebSocket提供了很好的支持,在pipeline里添加一个WebSocketServerProtocolHandler就可以方便的暴露一个ws接口出去。但是,开发中却遇到一点小问题,需要在ws的URI带上参数queryString(如:/im/ws?w=221100234&t=99),然而这样会导致ws连接无法建立,浏览器报错:Connection closed before receiving a handshake response。
2、解决:
因为全安问题,ws是不推荐通过queryString携带信息的,所以Netty里WebSocketServerProtocolHandler默认的构造器是要求对连接建立时传入的URI与程序指定的路径完全匹配。
checkStartsWith即是控制根据startsWith来做URI匹配,所以改用重载的构造器即可解决问题(注意queryString上不要携带敏感信息)。
checkStartsWith使用的地方如下图中WebSocketServerProtocolHandshakeHandler类: