2013-05-13 9 views
6

Wie Beenden von HttpClient-Sitzung?Beenden von HttpClient-Sitzung

Ich verwende den folgenden Code an die Anwendung anmelden Apache Httpclient mit

public HttpClient loginToHexgen(String username, String password) { 
     HttpClient client = new DefaultHttpClient(); 

     // send post url to login to hexgen 
     HttpPost post = new HttpPost("http://localhost:8080/j_spring_security_check"); 

     try { 
      // set the user name and password 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
      nameValuePairs.add(new BasicNameValuePair("j_username", username)); 
      nameValuePairs.add(new BasicNameValuePair("j_password", password)); 

      post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = client.execute(post); 

      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       post.abort(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return client; 
    } 

wie folgt aus:

HttpClient client = new DefaultHttpClient(); 
client= httpRequest.loginToHexgen("mayank", "hexgen"); 

hier httpRequest die Klasse ist, wo die loginToHexgen Methode verwendet wird.

Wenn ich mit mehreren Benutzer mit verschiedenen Benutzernamen und Passwort in das System einloggen möchte, wie dies zu tun?

Wie zum Beispiel in der gleichen Sitzung möchte ich einen Benutzer abmelden und mit anderen Benutzer anmelden.

Antwort

4

Sie können eine Problemumgehung verwenden - um eine Anfrage an einen neuen Benutzer mit einem neuen CookieStore zu senden.

// Create a local instance of cookie store 
cookieStore = new BasicCookieStore(); 
// Set the store 
httpClient.setCookieStore(cookieStore); 

Der Server öffnet eine neue Sitzung für Ihren neuen Benutzer. Bitte beachten Sie, dass die alte Sitzung NICHT geschlossen wird. Ich empfehle nicht, diesen Weg zu verwenden.

Die Sitzungsverwaltung wird auf der Serverseite ausgeführt - auf der Clientseite ist dies nicht möglich. Ich empfehle am Ende des Tests, dass Sie eine Server-URL aufrufen, die eine Sitzung auf der Serverseite ungültig macht. (Im Allgemeinen haben Anwendungen, die Formularauthentifizierung verwenden, eine Abmeldefunktion, die Sie nur verwenden müssen)

+1

+1 für die Antwort, ich habe versucht, verschiedene Benutzer mit anderem Kennwort zu senden, aber zu meiner Überraschung verursachte es kein Problem und funktioniert wie eingerückt. Danke für die Bemühung. –

+0

Das Problem, dass Sie den folgenden Code in Ihrer Funktion 'loginToHexgen' haben:' HttpClient client = new DefaultHttpClient(); '. Dies entspricht der Erstellung von cookieStore für einen neuen Benutzer. Hinweise: 1. Wenn Sie im Namen des authentifizierten Benutzers auf die URL zugreifen möchten, müssen Sie dieselbe HttpClient-Instanz verwenden (andernfalls wird die Anfrage ohne Cookies ausgeführt). 2. Sie können Ihren Server einchecken und Sie werden sehen, dass bei jeder Anmeldung eine neue Sitzung erstellt wird. – Michael