1

私の HttpServletRequest.getCookies() が Cookie 値全体を返していません。Cookie 値は別のキーと値のペアであるため、おそらく解析が台無しになっています。これを回避する方法を知る必要があります。

というわけで背景はこちら。Cookie にユーザー名とパスワードを設定して認証を行う新しい apache2.4 mod_auth_form を使用しています。Cookie は次のようになります: "session=private-user=myUser&private-pw=myPass"

特定の REST 呼び出しが tomcat サービスに渡されるように、Apache にプロキシを設定しました。Tomcat サービスでは、Jersey REST クラスがそれらを待機しています。

ブラウザで Cookie を確認できます。php で完全な Cookie も確認できます。ただし、私の Java クラスでは、HttpServletRequest に「セッション」Cookie がありますが、値は単に「private-user=myUser&private-pw=myPass」ではなく「private-user」です。

私の推測では、キーと値のペアに = 記号と & 記号を使用すると、解析がうまくいかない可能性があります。完全な未加工の Cookie 値を取得するにはどうすればよいですか?

重要な場合、これが私のJavaコードです。

private String getAuthenticatedUser(HttpServletRequest httpRequest) {
        String user = null;
        Cookie[] cookies = httpRequest.getCookies();
        for(Cookie cookie : cookies) {
            System.out.println(cookie.getValue());
        }
}

ありがとう

4

2 に答える 2

0

Jersey の @CookieParam アノテーションを使用して、これを回避する方法を見つけました。

@GET
@Path("/")
public Response myRestCall(@CookieParam("session") String sessionValue) {
  System.out.println(sessionValue);
}

Jersey は、このタイプのキー値 Cookie をより適切に解析しているようで、期待どおりに「private-user=myUser&private-pw=myPass」を返しました。

于 2013-03-05T18:20:52.107 に答える
0

Cookie に値を設定する前に、URLEncoder を使用して値をエンコードします。

String s = new String("private-user=myUser&private-pw=myPass");
String encoded = URLEncoder.encode(s);

URLDecoder を使用してデコードし、元の値に戻します。

URLDecoder.decode(encoded);
于 2013-03-05T11:09:37.300 に答える