2013-10-23 19 views
9

Bir sunucu uygulamasını HTTP yanıt olarak bir başlık ayarlıyorum A ettik: bir sunucu uygulaması B ŞimdiHTTP yanıtında üstbilgi nasıl ayarlanır?

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

, içeri kuruldu başlık değerini almaya çalışıyorum servlet A:

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

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


Ama burada kimliği değeriolarak geliyor 210. Lütfen burada neleri kaçırdığımı bana bildirin.

+0

@Nambari, bana eğer istersem bildirin misiniz userid bilgilerini ServletB'ye gönder, sonra bunu mevcut başlık kullanarak nasıl ayarlayabilirim? –

+0

, userinfo göndermek istediğim başka bir uygulama olduğundan, SSO uygulaması için başlık veya çerez kabul eder. –

cevap

7

Önce

response.sendRedirect(newUrl); 

Bu istemci (tarayıcı) bir URL ile 302 http kodu yanıtını veriyor doğasını anlamak gerekir. Tarayıcı daha sonra bu URL'de ayrı bir GET isteği yapar. Ve bu istek ilkinde başlıkların bilgisi yok.

Eğer çalışmak için bu kodu isterseniz B.

Servlet Servlet A'dan bir başlık geçmeleri gerekiyor Yani eğer sendRedirect çalışmaz - (yerine sendRedirect ait) Servlet A'da RequestDispatcher kullanın. Ayrıca, göreceli yolu kullanmak her zaman daha iyidir.

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

Başlık alanları sonraki istekler için kopyalanmaz. Bunun için (addCookie yöntemi) ya da "REMOTE_USER" değerini saklayın (getSession yöntemiyle elde edebileceğiniz). Her şeyden

+0

Ya da istek öznitelikleri kullanın ... – dwegener

İlgili konular