Servlets HttpServletRequest未返回整个cookie

Servlets HttpServletRequest未返回整个cookie,servlets,cookies,jersey,Servlets,Cookies,Jersey,我的HttpServletRequest.getCookies没有返回整个cookie值。 cookie值是另一个键值对,因此这可能会扰乱解析过程。我需要知道如何避开这件事 这就是背景。我正在使用新的apache2.4 mod_auth_表单,它通过在cookie中设置用户名和密码来进行身份验证。 cookie看起来像这样: session=private user=myUser&private pw=myPass 我在Apache上设置了一个代理,以便将某些REST调用传递到tomcat服务,

我的HttpServletRequest.getCookies没有返回整个cookie值。 cookie值是另一个键值对,因此这可能会扰乱解析过程。我需要知道如何避开这件事

这就是背景。我正在使用新的apache2.4 mod_auth_表单,它通过在cookie中设置用户名和密码来进行身份验证。 cookie看起来像这样: session=private user=myUser&private pw=myPass

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

我可以在浏览器中看到cookie。我还可以在php中看到完整的cookie。 但是,在我的java类中,HttpServletRequest具有会话cookie,但其值只是private user,而不是我所期望的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());
        }
}

谢谢

在cookie中设置值之前,请使用URLCoder对值进行编码

String s = new String("private-user=myUser&private-pw=myPass");
String encoded = URLEncoder.encode(s);
并使用URLDecover将其解码回原始值

URLDecoder.decode(encoded);

我用Jersey的@CookieParam注释找到了解决这个问题的方法

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

Jersey似乎能更好地解析这种类型的键值cookie,并像我预期的那样返回private user=myUser&private pw=myPass。

不幸的是,我无法控制这一点。正如我所提到的,apache mod_auth_form模块设置cookie。这并没有解释它是如何解决这个问题的。您刚刚使用了注释,而不是手动从Cookie获取值。您是对的。它解决了我的问题,因为我能够解决它。对于我来说,这个解决方案实际上比使用HttpServletRequest更优雅。但是我仍然想知道如何从HttpServletRequest中获取完整的cookie,如果您知道的话。