如何在Android应用程序客户端中启用会话跟踪

时间:2013-12-24 10:42:58

标签: android web-services session soap

我现在正在开发我的第一个Android应用程序。

我的应用程序使用SOAP消息与Web服务交互。 Web服务位于glassfish4服务器。

所以我希望每个与Web服务交互的用户都会获得代表Web服务的类的新实例。

我阅读了如何执行此操作,我需要将@HttpSessionScope注释添加到Web服务类。

但是我应该在客户端编写什么,在Android应用程序中启用会话跟踪?

由于

1 个答案:

答案 0 :(得分:0)

应该是Android用户登录的web服务。 webservice的结果还应包含登录用户的会话ID(仅当用户已登录时)。 并且可以通过在会话头(或请求属性)中将会话ID作为cookie传递来跟踪会话。 这是一个从this answer引用的java代码,用于发出请求属性请求。

try {
            URL url  = new URL("https://visruthcv.appspot.com/project/listUsers");
            URLConnection con = url.openConnection();

            HttpURLConnection httpUrlConnection = (HttpURLConnection) con;
            httpUrlConnection.setReadTimeout(10000);
            httpUrlConnection.setConnectTimeout(15000);
            httpUrlConnection.setRequestMethod("POST");
            httpUrlConnection.setDoInput(true);
            httpUrlConnection.setDoOutput(true);

            /*
             * for request headers
             */
            httpUrlConnection.setRequestProperty("Accept",
                    "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            httpUrlConnection.setRequestProperty("Accept-Charset",
                    "ISO-8859-1,utf-8;q=0.7,*;q=0.3");
            httpUrlConnection.setRequestProperty("Accept-Encoding", "gzip,deflate,sdch");
            httpUrlConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.8");
            httpUrlConnection.setRequestProperty("Connection", "keep-alive");
            httpUrlConnection.setRequestProperty("Cookie", "JSESSIONID=9550495DDC72AAC410B07B6C16908CB5");


            /*
             * for adding request parameters
             */
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("username", "Visruth");
            params.put("password", "passwd");

            OutputStream os = httpUrlConnection.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getQuery(params));
            writer.flush();
            writer.close();
            os.close();

            httpUrlConnection.connect();

            // To write to a file, something like this
            InputStream is = httpUrlConnection.getInputStream();
            FileOutputStream fos = new FileOutputStream("/home/visruth/Desktop/output.txt");
            int i = 0;
            byte[] b = new byte[1024];

            while((i = is.read(b)) != -1) {
                fos.write(b);
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }

在上面的代码中,httpUrlConnection.setRequestProperty("Cookie", "JSESSIONID=9550495DDC72AAC410B07B6C16908CB5");将会话ID(9550495DDC72AAC410B07B6C16908CB5)设置为请求属性中的Cookie。 Cookie值格式为JSESSIONID=9550495DDC72AAC410B07B6C16908CB5,其中9550495DDC72AAC410B07B6C16908CB5仅是会话ID在网络中创建的内容。通过添加cookie来进行每个请求可以跟踪会话。