Java 只有在响应不存在时才将cookie添加到响应中
我需要检查是否已将cookie添加到响应中 我有一个奇怪的问题,我的响应是两次收到一个设置的Cookie头 设置Cookie:foo=bar;Domain=dev.mysite.com;Expires=Fri,2062年5月5日04:05:43格林威治标准时间;路径=/ 设置Cookie:foo=bar;Domain=dev.mysite.com;Expires=Fri,2062年5月5日04:05:43格林威治标准时间;路径=/ 这两个标题完全相同。当我调试堆栈时,它会调用此代码两次。这段代码的重复是由于我正在使用的web堆栈造成的,我无法更改它 我不关心请求中发送了哪些cookie,但我不希望此标头发送两次 似乎没有一种简单的方法可以找到通过addHeader方法添加的Cookie 在调试期间,奇怪的是,如果我在response.addCookiemyCookie之后检查response对象中的头;调用我看不到设置的Cookie头 如果响应中尚未发送同名的cookie,是否有一种方法只能将cookie添加到响应中?Home是正确的 我已经围绕HttpServletResponseWrapper创建了一个包装器,并将Cookie存储在addCookie方法中 然后在添加另一个cookie之前,我检查列表中是否存在cookieJava 只有在响应不存在时才将cookie添加到响应中,java,cookies,response,session-cookies,Java,Cookies,Response,Session Cookies,我需要检查是否已将cookie添加到响应中 我有一个奇怪的问题,我的响应是两次收到一个设置的Cookie头 设置Cookie:foo=bar;Domain=dev.mysite.com;Expires=Fri,2062年5月5日04:05:43格林威治标准时间;路径=/ 设置Cookie:foo=bar;Domain=dev.mysite.com;Expires=Fri,2062年5月5日04:05:43格林威治标准时间;路径=/ 这两个标题完全相同。当我调试堆栈时,它会调用此代码两次。这段代码
感谢您的帮助。如果Set Cookie header已包含此类Cookie,则可以选中它
public static void addCookieIfNotExists(Cookie cookie, HttpServletResponse response) {
boolean exists = response.getHeaders("Set-Cookie").stream()
.noneMatch(cookieValue -> cookieValue.startsWith(cookie.getName() + "="));
if (!exists) {
response.addCookie(cookie);
}
}
我不知道有什么标准方法。您可能需要使用HttpServletResponseWrapper解决这个问题,并记住那里的cookies?!是的,正如home和AFAIR所提到的,直到响应被发送到客户端并作为请求的一部分被接收回来,您的程序才能访问cookies。您唯一的选择是记住在响应生成中已经设置了哪些cookie。