web-dev-qa-db-ja.com

HTTP応答にヘッダーを設定する方法は?

私はサーブレットを持っています[〜#〜] a [〜#〜] 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);
}

サーブレットで[〜#〜] b [〜#〜]、サーブレットに設定されたヘッダー値を取得しようとしています[〜#〜] a [〜 #〜]

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

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


しかし、ここではseridの値はnullになっています。ここで何が欠けているのか教えてください。

14

まず、あなたはの性質を理解する必要があります

response.sendRedirect(newUrl);

クライアント(ブラウザ)302 URLにHTTPコード応答を提供しています。その後、ブラウザはそのURLで別のGET要求を行います。そして、そのリクエストは最初のヘッダーのヘッダーを知りません。

そのため、サーブレットAからサーブレットBにヘッダーを渡す必要がある場合、sendRedirectは機能しません。

このコードを機能させる場合は、(sendRedirectの代わりに)サーブレットAでRequestDispatcherを使用します。また、相対パスを使用することを常にお勧めします。

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");
}
10
pubsy

コントローラーにHttpServletResponseパラメーターを追加し、ヘッダーを手動で追加しただけです。フィルターやインターセプトは不要で、正常に機能します。

httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS");
httpServletResponse.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, X-Csrf-Token, WWW-Authenticate, Authorization");
httpServletResponse.setHeader("Access-Control-Allow-Credentials", "false");
httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
3
hd1

ヘッダーフィールドは後続のリクエストにはコピーされません。これにはcookie(addCookieメソッド)を使用するか、セッションに「REMOTE_USER」を保存する必要があります(getSessionメソッドで取得できます)。

0
mgorniew