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,这是我后来需要的。
答案 0 :(得分:0)
我认为你应该从饼干中获取JSESSIONID
,并将其从#34;魔法&#34;办法。为此,DefaultHttpClient
具有getCookieStore()
和CookieStore
具有getCookies()
方法的功能。尝试使用它们。
编辑:广告评论
你错了,你的登录机制无法正常工作。如果粘贴代表已登录用户会话的JSESSIONID
,则服务器可能会忽略登录请求并返回经过身份验证的内容。这称为会话劫持。
所以你需要仔细检查登录机制。
答案 1 :(得分:0)
正如Antoniossss所说,最好使用标准的cookie处理方法。话虽这么说,你的方式可能应该是你的饼干,因为毕竟他们是以标题的形式发送。
但是,我确实发现您的代码存在潜在问题。您测试JSESSIONID的索引是否大于0.但是如果JSESSIONID位于标题字符串的最开头,那么它的索引将为0,您将错过它。您应该测试JSESSIONID的索引是否大于-1。