問題描述
我遇到了與 Android 中的 Websockets 和 cookie 相同的問題,并且我有一直在嘗試按照第一條評論的建議解決它,
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)
WebSocketClient( URI serverUri , Draft protocolDraft , Map httpHeaders , int connectTimeout)
使用 Java-WebSocket,以及查看許多其他 API,例如 Jetty 和AndroidAsync.但盡管如此,我無法打開 websocket 連接.
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.
我有一個 Apache http cookie,并且需要這個來通過 WebSocket 向服務器驗證我自己的身份.將 cookie 轉換為 httpHeader 的正確方法是什么,或者有什么巧妙的方法可以在連接到 websocket 時簡單地將整個 cookie 添加到身份驗證中?也許我只是錯過了明顯的..
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!
推薦答案
所以我實際上設法解決了它,結果發現實際問題不是cookie,而是websocket沒有初始化一個有效的 ssl 上下文.這很容易解決:
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();
使用 WebSocketOrderClient:
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.
這篇關于使用身份驗證 cookie 打開 WebSocket 連接的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!