java - android使用websocket无法访问cookie。

 sense宏江 发布于 2022-10-27 17:56

我的java服务端为了分清各个用户使用session里的用户名做了区分,html页面使用没有问题,但是在android端访问的时候取不到cookie值。

public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
            Map attributes) throws Exception {
        if (request instanceof ServletServerHttpRequest) {
            ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
            // 链接webSocket时传递的参数 标识是否是特定分组, Null表明不是
            //String type = (String) servletRequest.getServletRequest().getParameter("type");
            HttpSession session = servletRequest.getServletRequest().getSession(false);
            if (session != null) {
                LoginUserInfo user = (LoginUserInfo) session.getAttribute("loginUserInfo");
//                System.out.println("id");
//                System.out.println(session.getId());
                if (user != null) {
                    attributes.put("user", user);
                    //attributes.put("type", type);
                    
                    Enumeration params = servletRequest.getServletRequest().getParameterNames();
                    while (params.hasMoreElements()) {
                        String param = params.nextElement();
                        attributes.put(param, servletRequest.getServletRequest().getParameter(param));                        
                    }
                }
            }
        }
        return true;
    }


//websocket建立

WebSocketClient websocket;

/**
 * 与服务器建立websocket连接
 */
private void websocket() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            //获取之前的登录信息
            String Cookie = cookie.get(0).getName()+"="+cookie.get(0).getValue()+";"+ cookie.get(4).getName()+"="+cookie.get(4).getValue()+";"+ cookie.get(5).getName()+"="+cookie.get(5).getValue()+";";
           application.setCookie(Cookie);
            Log.i("", Cookie);
            try {
                HashMap hashMap = new HashMap();
                hashMap.put("Cookie", Cookie);
                // 这里的url不能带有http://
                // 直接使用 xx.xx.xx.xx:端口
                websocket = new WebSocketClient(new URI(HttpUrlS.WEBSOCKET), new Draft_17(), hashMap, 5000) {
                    @Override
                    public void onOpen(ServerHandshake handshakedata) {
                        Log.d("MyTAG", "WebSocketClient onOpen");
                    }

                    @Override
                    public void onMessage(final String message) {
                            //WebSocketUtil.handleMessage(message);
                        Log.i("", "有人说:" + message);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                              //Toast.makeText(MainActivity.this, "有人说:" + message, Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                    @Override
                    public void onClose(int code, String reason, boolean remote) {
                        Log.d("MyTAG", "close = " + reason);
                    }

                    @Override
                    public void onError(Exception ex) {
                        ex.printStackTrace();
                        Log.d("MyTAG", "onError = " + ex.toString());
                    }
                };
                websocket.connect();
            } catch (URISyntaxException e) {
                e.printStackTrace();
            }
        }
    }).start();
}
2 个回答
  • 你好,请问一下Android怎么自定义的loginUserInfo手动传?

    2022-10-28 16:22 回答
  • 他没传吧,自定义的loginUserInfo需要android手动传

    2022-10-29 01:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有