我有一个应用程序,通过被动客户端进行身份验证。基本上基于服务器信息,将启动浏览器并显示登录屏幕。用户输入登录凭据后,将在shouldOverrideUrlLoading
中完成cookie和会话的进一步处理。
当我在群集环境中连接到Web应用程序服务器时,问题就出现了。当用户连接到第一台服务器时,它会显示登录屏幕并且用户输入详细信息,服务器进行身份验证,但在shouldOverrideUrlLoading
中的会话处理期间,我的代码使用相同的URL连接到同一服务器,但来自服务器的响应来自该用户尚未通过身份验证,而他已完成身份验证。
因此,为了区分不同的服务器,我们使用JSESSIONID来识别服务器。
我得到了第一个URL上使用的原始JSESSIONID,但是当第二个URL被触发时,我的代码使用了第二个URL请求中第一个URL的JSESSIONID和其他cookie。要触发第二个网址,我使用org.apache.http.impl.client.DefaultHttpClient.execute
方法。
我不确定从服务器获取用户已经过身份验证的响应我缺少什么。
答案 0 :(得分:0)
我解决了这个问题。 cookie版本存在问题,我在为第二个请求构建HTTP上下文时使用。
BasicClientCookie cookie = new BasicClientCookie(name,value);
// cookie.setVersion(1);
cookie.setDomain(host);
cookie.setPath("/");
cookie.setSecure(true);
cookieJar.addCookie(cookie);
我评论了cookie的版本,然后它识别了发送给在第一次请求中验证的同一集群成员的请求。