Servlets HttpServletRequest未返回整个cookie
我的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代码,如果它很重要的话: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服务,
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,如果您知道的话。