socket.io Android 库认证
Posted
技术标签:
【中文标题】socket.io Android 库认证【英文标题】:socket.io Android library authentication 【发布时间】:2016-01-12 15:39:54 【问题描述】:我使用这个库 (https://github.com/socketio/socket.io-client-java) 将我的 android 应用程序与我的 Sails socket.io 连接起来。
这是我使用的代码:
final Socket socket = IO.socket(Constants.LOCAL_URL+"?__sails_io_sdk_version=0.11.0");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener()
@Override
public void call(Object... args)
JSONObject obj1 = new JSONObject();
try
obj1.put("url","/rest/room");
catch (JSONException e)
e.printStackTrace();
socket.emit("get", obj1, new Ack()
@Override
public void call(Object... args)
Log.e("test", "GET");
);
Log.e("test", "CONNECT");
).on("room", new Emitter.Listener()
@Override
public void call(Object... args)
Log.e("test", "ROOM");
);
但我有一个 403 原因 URL 需要身份验证。那么如何修改套接字标头以放置 Cookie
并保持套接字和 Web 服务之间的会话?
【问题讨论】:
【参考方案1】:这是图书馆开发人员的答案:https://github.com/socketio/socket.io-client-java/issues/226
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener()
@Override
public void call(Object... args)
Transport transport = (Transport)args[0];
transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener()
@Override
public void call(Object... args)
@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
// modify request headers
headers.put("Cookie", Arrays.asList("foo=1;"));
);
transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener()
@Override
public void call(Object... args)
@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
// access response headers
String cookie = headers.get("Set-Cookie").get(0);
);
);
【讨论】:
以上是关于socket.io Android 库认证的主要内容,如果未能解决你的问题,请参考以下文章