Java 只有在响应不存在时才将cookie添加到响应中

Java 只有在响应不存在时才将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格林威治标准时间;路径=/ 这两个标题完全相同。当我调试堆栈时,它会调用此代码两次。这段代码

我需要检查是否已将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之前,我检查列表中是否存在cookie


感谢您的帮助。

如果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。