2017-12-28 5 views
2

Ich verwende Restful Dienste auf dem Server und versuchen, die gleiche Sitzung nach der Durchführung Login zu erhalten:HttpURLConnection halten Sitzung

URL endpoint = new URL(getString(R.string.url_login)); 
// Create connection 
HttpURLConnection myConnection = (HttpURLConnection) endpoint.openConnection(); 
myConnection.setRequestMethod("POST"); 
myConnection.setRequestProperty("User-Agent", "my-rest-app-v0.1"); 
// Create the data 
String myData = "username=" + username + "&password=" + pwd; 
// Enable data writing 
myConnection.setDoOutput(true); 
// Write the data 
myConnection.getOutputStream().write(myData.getBytes()); 
rc = myConnection.getResponseCode(); 
if (rc == 200) { 
     String Cookie= myConnection.getHeaderField("Set-Cookie"); 
     URL endpoint2 = new URL(getString(R.string.url_checkUserType)); 
     HttpURLConnection myConnection2 = 
       (HttpURLConnection)endpoint2.openConnection(); 
     myConnection2.setRequestMethod("GET"); 
     myConnection2.setRequestProperty("User-Agent", "my-rest-app-v0.1"); 
     myConnection2.setRequestProperty("Cookie", Cookie); 
     rc2 = myConnection2.getResponseCode(); 
.... 
     }.... 

Das Problem ist, dass RC2 jedes Mal 401 als WebService ist nicht, dass requiest erkennen Teil ist der gleichen Sitzung. Was mache ich falsch?

+0

Die Lösung war [Spring RESTful Dienste für Android] (https://spring.io/guides/gs/consuming-rest-android/), die für mich gut funktionierte. – AlexP

Antwort

0

Sie tun können als

  1. auf der Server-Seite folgt, überprüft er, ob die eingehende Anforderung eine „Sitzungs“ in Cookie hat: wenn nicht, erstellen Sie ein und senden Sie es als Antwort; wenn ja, sie weiß, gehört die Anforderung an eine bekannte Sitzung
  2. auf der Client-Seite, nach einer erfolgreichen Anmeldung, rufen Sie die „Sitzungs“ aus der Antwort, und legen Sie es in den folgenden Anfragen

==

connection.setRequestProperty("Cookie", "JSESSIONID=" + URLEncoder.encode(jSessionId, "UTF-8")); 
+0

Warum muss ich jSessionId codieren? Eine Variable 'Cookie' enthält eine Zeichenfolge wie' JSESSIONID = FA4D1226F11D2EBCB85361D5D9CA703F; Pfad =/Mein_Server; HttpOnly' es scheint, dass Sie das gleiche tun oder nicht? – AlexP

+0

Es wird eine Zeichenkette in das Format application/x-www-form-urlencoded übersetzt, in der URL ist kein Zeichen erlaubt. –

+0

Aber wenn es vom Server zurückgegeben wird, sollte es erlaubt sein? Jeder Weg Spring Security (* was ich auf der Serverseite benutze) lehnt es immer noch – AlexP

Verwandte Themen