使用身份验证 cookie 打开 WebSocket 连接



我与Android中的Websockets和cookie有相同的问题,我一直在尝试按照第一条评论的建议解决它,

WebSocketClient( URI serverUri , Draft protocolDraft , Map httpHeaders , int connectTimeout)

使用Java-WebSocket,以及查看许多其他API,如Jetty和AndroidAsync。但尽管如此,我无法打开 websocket 连接。

我有一个Apache http cookie,需要它来使用WebSocket向服务器进行身份验证。将 cookie 转换为 httpHead 的正确方法是什么,或者是否有任何巧妙的方法可以在连接到 websocket 时简单地将整个 cookie 添加到身份验证中?也许我只是错过了显而易见的..

对于可能的术语误用表示歉意,但我希望您了解大致情况。

任何帮助将不胜感激,谢谢!

所以我实际上设法解决了它,事实证明,实际问题不是 cookie,而是 websocket 没有使用有效的 sslcontext 初始化。这很容易通过以下方式解决:

WebSocketOrderClient webSocketOrderClient = new WebSocketOrderClient(uri, new Draft_17(), cmap, TIMEOUT);
SSLContext sslContext = null;
sslContext = SSLContext.getInstance( "TLS" );
sslContext.init( null, null, null ); // will use java's default key and trust store which is sufficient unless you deal with self-signed certificates
webSocketOrderClient.setWebSocketFactory(new DefaultSSLWebSocketClientFactory(sslContext));
webSocketOrderClient.connectBlocking();

使用 WebSocketOrderClient:

private class WebSocketOrderClient extends WebSocketClient {
    public WebSocketOrderClient( URI serverUri, Draft draft, Map<String, String> headers, int timeout) {
        super( serverUri, draft, headers, timeout );
    }
    @Override
    public void onOpen( ServerHandshake handshakedata ) {
        Log.w("connected", "true");
    }
    @Override
    public void onMessage( String message ) {
        Log.w( "got: ", message );
    }
    @Override
    public void onClose( int code, String reason, boolean remote ) {
        Log.w( "Disconnected", ""+code  );
    }
    @Override
    public void onError( Exception ex ) {
        ex.printStackTrace();
    }
}

希望这对将来可能遇到此问题的任何人有所帮助。

相关内容

  • 没有找到相关文章

最新更新