Потерянный Заголовок во время 303 ответа

У меня есть следующий обработчик, который перенаправляет мой запрос другому обработчику (LoginHandler):

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();
       }
   }
}

Это следующий заголовок, 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();
   }
}

Я не могу прочитать в заголовке запроса заголовок пользователя, который я добавил. Что я делаю неправильно?

Заранее спасибо.

1 ответ

Решение

Заголовки ответа не следуют за перенаправлениями http. Вы можете включить его в файл cookie или в качестве параметра запроса Location заголовок.

Измените ваше местоположение на:

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

или добавьте его в качестве заголовка SetCookie:

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

Set-Cookie сообщит браузеру сохранить cookie и включить его во все запросы обратно на сервер. Хотя включение его в ваше местоположение сделает его доступным один раз при обработке перенаправления.

Другие вопросы по тегам