java - android使用websocket无法访问cookie。
问题描述
我的java服务端为了分清各个用户使用session里的用户名做了区分,html页面使用没有问题,但是在android端访问的时候取不到cookie值。
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> 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<String> 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() {@Overridepublic 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<String, String> hashMap = new HashMap<String, String>();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();}
问题解答
回答1:他没传吧,自定义的loginUserInfo需要android手动传
回答2:你好,请问一下Android怎么自定义的loginUserInfo手动传?
相关文章:
1. 老师,flex-shrink: 1; 按视频操作,不会自动缩放2. docker api 开发的端口怎么获取?3. 如何解决docker宿主机无法访问容器中的服务?4. docker images显示的镜像过多,狗眼被亮瞎了,怎么办?5. 如何解决Centos下Docker服务启动无响应,且输入docker命令无响应?6. docker镜像push报错7. 前端 - 类到底该如何去命名 .newsList 这种的命名难道真的不是过度语义化吗?~8. python - 怎样在linux下开发flask web应用时查看代码出错(traceback)的地方。9. web服务器 - ubuntu下布置apache加wsgi加python10. 如何设置一个无限循环并打破它。(Java线程)

网公网安备