我有一个受保护的资源,需要我登录。我使用具有以下代码块的公共客户端。
HttpClient httpClient = new HttpClient();
httpClient.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
httpClient.getParams().setParameter("http.protocol.single-cookie-header", Boolean.TRUE);
PostMethod postMethod = new PostMethod("/admin/adminlogon.do");
postMethod.setRequestEntity(new StringRequestEntity("action=logon&adminUser=admin&adminPassword=password",
"application/x-www-form-urlencoded",
"UTF-8"));
postMethod.addParameter("action","logon");
postMethod.addParameter("adminUser","admin");
postMethod.addParameter("adminPassword","password");
httpClient.executeMethod(postMethod);
String response2 = postMethod.getResponseBodyAsString();
以上是我基本上登录的地方。这很好,我得到了一个不错的小 JSESSIONID cookie。
GetMethod get = new GetMethod("/admin/api.do?action=getSomeJson");
httpClient.executeMethod(get);
当我检查第二个请求的服务器上的逻辑时,我注意到我们使用了不同的 JSESSIONID。因此,get 似乎无法登录。我的印象是 httpClient 管理 cookie 并将相同的 cookie 发回。当我通过 UI 正常登录我的应用程序时,我在每个请求中看到相同的 cookie,只是在此测试代码中没有。
String s = get.getResponseBodyAsString();
get.releaseConnection();
我是否需要对 httpClient 做一些事情以确保它在执行 get 请求时使用与第一个 post 请求相同的 cookie?
提前致谢。