Search code examples
androidapplication-serverjsessionid

Handling a clustered environment in an android application


I have an application where authentication happens through a passive client. Basically based on server information, a browser will be launched and it will show a login screen. Once the user enters login credentials, the further handling of cookies and session is done in shouldOverrideUrlLoading.

The issue is coming with authentication when I am connecting to web application servers in a clustered environment. When user connects to first server, it shows him login screen and user enters the details, server authenticates, but during session handling in shouldOverrideUrlLoading, my code connects to the same server with same url, but the response from the server comes that user has not been authenticated, while he has already done authentication.

So to differentiate between different servers, we use JSESSIONID to identify server. I get the original JSESSIONID that was used on the first URL, but when the second URL is fired, my code use JSESSIONID and other cookies from the first URL in the request of second URL. To fire second URL, i use org.apache.http.impl.client.DefaultHttpClient.execute method.

I am not sure what I am missing to get the response from server that user is already authenticated.


Solution

  • I resolved this issue. There was an issue with cookie version, I was using while building a HTTP context for second request.

    BasicClientCookie cookie = new BasicClientCookie(name,value);
    // cookie.setVersion(1);
    cookie.setDomain(host);
    cookie.setPath("/");
    cookie.setSecure(true);
    cookieJar.addCookie(cookie);
    

    I commented version for cookie and then it recognized request to send to same cluster member which was authenticated in first request.