问题
I have the same issue as Websockets and cookies in Android, and I have been trying to solve it as the first comment suggested,
WebSocketClient( URI serverUri , Draft protocolDraft , Map httpHeaders , int connectTimeout)
using Java-WebSocket, as well as looking at many other APIs such as Jetty and AndroidAsync. But despite this I am unable to open up a websocket connection.
I have an Apache http cookie, and need this to authenticate myself to the server with a WebSocket. What is the correct way of translating a cookie into a httpHeader, or is there any neat way to simply add the entire cookie in the authentication when connection to a websocket? Maybe I am just missing the obvious..
Apologies for possible misuses of terms, but I hope you get the general idea.
Any help would be much appreciated, thank you!
回答1:
So I actually managed to solve it, and it turned out that it was not the cookie that was the actual issue, but rather that the websocket is not initialized with a valid sslcontext. This was solved rather easily by:
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();
with 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();
}
}
Hope this helps anyone who might run into this problem in the future.
来源:https://stackoverflow.com/questions/27166258/open-websocket-connection-with-authentication-cookie