java-JSR-356:如何在握手期间中止websocket连接?
作者:互联网
我需要能够在握手期间中止websocket连接,以防HTTP请求不符合某些条件.据我了解,正确的做法是在我自己的Configurator实现的ServerEndpointConfig.Configurator.modifyHandshake()方法内.我只是不知道该怎么办才能中止连接.有一个HandshakeResponse参数,该参数允许将标头添加到响应中,但是我找不到任何能完成此工作的标头.
那么如何在握手期间中止Websocket连接呢?那有可能吗?
解决方法:
没错,请使用“ modifyHandShake()”更新响应标头,您需要完全删除或设置标头Sec-WebSocket-Accept的值,请从the spec中进行检查
The |Sec-WebSocket-Accept| header field indicates whether
the server is willing to accept the connection. If present, this
header field must include a hash of the client’s nonce sent in
|Sec-WebSocket-Key| along with a predefined GUID. Any other value
must not be interpreted as an acceptance of the connection by the
server.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
These fields are checked by the WebSocket client for scripted pages.
If the |Sec-WebSocket-Accept| value does not match the expected
value, if the header field is missing, or if the HTTP status code is
not 101, the connection will not be established, and WebSocket frames
will not be sent.
您的代码如下所示:
@Override
public void modifyHandshake(ServerEndpointConfig sec,
HandshakeRequest request, HandshakeResponse response) {
super.modifyHandshake(sec, request, response);
response.getHeaders().put(HandshakeResponse.SEC_WEBSOCKET_ACCEPT, new ArrayList<String>());
}
浏览器将解释为服务器未接受连接.例如在chrome中我得到消息
Error during Websocket handshake
标签:java,websocket,java-ee,java-7,java-ee-7 来源: https://codeday.me/bug/20191010/1887284.html