2013-10-23 12 views
9

Mam aplet gdzie jestem ustawienie nagłówka w odpowiedzi http:Jak ustawić nagłówek w odpowiedzi HTTP?

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String userName=request.getParameter("userName"); 
    String newUrl = "http://somehost:port/ServletB"; 

    response.addHeader("REMOTE_USER", userName); 

    response.sendRedirect(newUrl); 
} 

Teraz w serwletu B, Próbuję uzyskać wartość nagłówka, który został ustawiony w serwlet :

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String userid = request.getHeader("REMOTE_USER"); 
} 


Ale tutaj wartość identyfikatora nadchodzi jako null. Daj mi znać, czego tu brakuje.

+0

@Nambari, mógłbyś dać mi znać, jeśli chcę wyślij informacje userid do ServletB, a następnie w jaki sposób ustawić to przy użyciu istniejącego nagłówka? –

+0

ponieważ inna aplikacja, którą chcę wysłać userinfo, akceptuje nagłówek lub plik cookie do wdrożenia SSO. –

Odpowiedz

7

Przede wszystkim trzeba zrozumieć naturę

response.sendRedirect(newUrl); 

To daje klienta (przeglądarki) 302 http odpowiedź kodu z adresu URL. Przeglądarka następnie wysyła osobne żądanie GET na ten adres URL. Ta prośba nie ma wiedzy o nagłówkach w pierwszej.

Więc sendRedirect nie będzie działać, jeśli trzeba przejść Główka Servlet A do serwletu B.

Jeśli chcesz ten kod do pracy - w użyciu RequestDispatcher Servlet A (zamiast sendRedirect). Zawsze lepiej jest użyć ścieżki względnej.

public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException 
{ 
    String userName=request.getParameter("userName"); 
    String newUrl = "ServletB"; 
    response.addHeader("REMOTE_USER", userName); 
    RequestDispatcher view = request.getRequestDispatcher(newUrl); 
    view.forward(request, response); 
} 

========================

public void doPost(HttpServletRequest request, HttpServletResponse response) 
{ 
    String sss = response.getHeader("REMOTE_USER"); 
} 
0

Pola nagłówka nie są kopiowane do kolejnych żądań. Do tego celu powinieneś użyć cookie (metoda addCookie) lub zapisać "REMOTE_USER" w sesji (co można uzyskać za pomocą metody getSession).

+0

A raczej użyj atrybutów żądania ... – dwegener