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

时间:2014-11-27 08:36:45

标签: java android cookies header websocket

我遇到与Websockets and cookies in Android相同的问题,我一直在努力解决这个问题,

  

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

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

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

对可能滥用条款的道歉,但我希望你能得到一般的想法。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

所以我实际上设法解决了它,结果发现它不是实际问题的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();
    }
}

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