得错会话ID

时间:2015-03-23 10:25:12

标签: java httpclient

public static ApiFactory getInstance(String url,String userName,String password){

            String sessionId = null;
            client = new DefaultHttpClient();
            ConstantUtil.setHostUrl(url);
            ConstantUtil.setUserName(userName);
            ConstantUtil.setPassword(password);

            try {
                    request = new HttpGet(ConstantUtil.getLoginUrl());
                    response = client.execute(request);
                    final Header[] headers = response.getHeaders("Set-Cookie");
                    for (int i = 0; i < headers.length; i++) {
                            if (headers[i].toString().indexOf("JSESSIONID") > 0) {
                                    int start = headers[i].toString().indexOf("JSESSIONID");
                                    int end = headers[i].toString().indexOf(";");
                                    sessionId = headers[i].toString().substring(start, end);
                            }
                    }

                    ConstantUtil.setLoginJsessionId(sessionId);



            } catch (ClientProtocolException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
            } finally {
                    request.abort();
            }

无法获取身份验证myloginUrl是... String loginurl = ConstantUtil.getHostUrl()+“/ j_spring_security_check?j_user =”+ getUserName()+“&amp; j_passw =”+ getPassword(); 实际上,当我发布json数据时,我需要jsessionId,这是我后来需要的。

2 个答案:

答案 0 :(得分:0)

我认为你应该从饼干中获取JSESSIONID,并将其从#34;魔法&#34;办法。为此,DefaultHttpClient具有getCookieStore()CookieStore具有getCookies()方法的功能。尝试使用它们。

编辑:广告评论

你错了,你的登录机制无法正常工作。如果粘贴代表已登录用户会话的JSESSIONID,则服务器可能会忽略登录请求并返回经过身份验证的内容。这称为会话劫持。 所以你需要仔细检查登录机制。

答案 1 :(得分:0)

正如Antoniossss所说,最好使用标准的cookie处理方法。话虽这么说,你的方式可能应该是你的饼干,因为毕竟他们是以标题的形式发送。

但是,我确实发现您的代码存在潜在问题。您测试JSESSIONID的索引是否大于0.但是如果JSESSIONID位于标题字符串的最开头,那么它的索引将为0,您将错过它。您应该测试JSESSIONID的索引是否大于-1。