HttpServletRequest不返回整个cookie

时间:2013-03-05 02:31:19

标签: servlets cookies jersey

我的HttpServletRequest.getCookies()没有返回整个cookie值。 cookie值是另一个键值对,所以可能会弄乱解析。我需要知道如何解决这个问题。

所以这是背景。我正在使用新的apache2.4 mod_auth_form,它通过在cookie中设置用户名和密码来进行身份验证。 cookie看起来像这样: “会话=私人用户= MYUSER&安培;私人-PW =为mypass”

我在Apache上设置了一个代理服务器,以便将某些REST调用传递给tomcat服务,在那里我有一个Jersey REST类等待它们。

我可以在浏览器中看到cookie。我也可以在php中看到完整的cookie。 但是,在我的java类中,HttpServletRequest具有“会话”cookie,但该值只是“私有用户”,而不是我期望的“private-user = myUser& private-pw = myPass”。

我最好的猜测是键值对与=和&符号搞乱了解析。如何获得完整的原始cookie值?

如果重要的话,这是我的java代码:

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

由于

2 个答案:

答案 0 :(得分:0)

在将值设置为cookie之前,使用URLEncoder对值进行编码。

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

并使用URLDecoder将其解码回原始值

URLDecoder.decode(encoded);

答案 1 :(得分:0)

我使用Jersey的@CookieParam注释找到了解决方法。

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

泽西岛似乎在解析这种类型的键值cookie方面做得更好,并按照我的预期返回了“private-user = myUser& private-pw = myPass”。