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 库认证的主要内容,如果未能解决你的问题,请参考以下文章

使用 Redis 和 Socket.io 进行用户认证

Socket.io 延伸

android studio连接io.socket:sokect.io-client服务器的条件

没有http服务器的Socket.IO?

Native Socket.IO and Android

需要了解有关 socket.io 和 redis 和 nginx 的一些信息