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類: