2017-02-27 1 views
0

Ich habe folgende Handler, der meine Anforderung an einen anderen Handler leitet (LoginHandler):verloren Kopf während 303 Antwort

public class ValidationHandler implements HttpHandler 
{ 
    @Override 
    public void handle(HttpExchange httpExchange) throws IOException 
    { 
     // Serve for POST requests only 
     if (httpExchange.getRequestMethod().equalsIgnoreCase("POST")) 
     { 
      Headers hds = httpExchange.getResponseHeaders(); 
      hds.add("Content-type","text/html"); 
      hds.add("Location","/login"); 
      //WHERE I ADD THE USER 
      hds.add("User", "someUser"); 
      //SEND A 303 to go to another handler (LoginHandler) 
      httpExchange.sendResponseHeaders(303,0); 
      httpExchange.close(); 
     } 
    } 
} 

Dies ist der folgende Kopfzeile, LoginHeader:

public class LoginHandler implements HttpHandler 
{ 

    @Override 
    public void handle(HttpExchange httpExchange) throws IOException 
    { 
     //I can't read the header USER on the following line! 
     httpExchange.getRequestHeaders().forEach((k,v) -> System.out.println(k + ':' + v)); 

     httpExchange.sendResponseHeaders(200,data.length()); 
     httpExchange.getResponseBody().write(data.getBytes()); 
     httpExchange.close(); 
    } 
} 

ich kann‘ t lese auf den requestHeaders den Header USER, den ich hinzugefügt habe. Was mache ich falsch?

Vielen Dank im Voraus.

Antwort

1

Antwort-Header folgen nicht HTTP-Weiterleitungen. Sie können es entweder als Cookie oder als Abfrageparameter in Ihren Header Location aufnehmen.

Ihre Position ändern:

hds.add("Location","/login?User=someUser"); 

oder als SetCookie Header hinzufügen:

hds.add("Set-Cookie", "User=someuser") 

SetCookie wird dem Browser mitteilen, das Cookie zu speichern und es in alle Anfragen zurück zu der Server. Wenn Sie es zusammen mit Ihrem Standort hinzufügen, wird es beim Umgang mit dem Redirect einmal zugänglich sein.

Verwandte Themen