我需要检查cookie是否已添加到响应中。
我有一个奇怪的问题,我的回复是两次收到Set-Cookie
标题。
Set-Cookie:foo=bar; Domain=dev.mysite.com; Expires=Fri, 05-May-2062 04:05:43 GMT; Path=/
Set-Cookie:foo=bar; Domain=dev.mysite.com; Expires=Fri, 05-May-2062 04:05:43 GMT; Path=/
2个标题完全相同。当我调试堆栈时,调用此代码两次。这个代码的两倍是由于我正在使用的Web堆栈,我无法更改。
我不关心请求中发送了什么cookie,但我不希望这个标头发送两次。
似乎没有一种简单的方法可以找到通过addHeader
方法添加的Cookie。
在调试期间,奇怪的是如果我在response.addCookie(myCookie);
调用后检查响应对象中的标头,我看不到Set-Cookie
标题。
如果在响应中尚未发送同名的cookie,我是否只能在响应中添加cookie?
答案 0 :(得分:0)
家是正确的。
我在HttpServletResponseWrapper
周围创建了一个包装器,并将Cookie存储在addCookie
方法中。
然后我在添加另一个之前检查列表中是否存在cookie。
感谢您的帮助。
答案 1 :(得分:0)
如果“Set-Cookie”标题已经包含此类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);
}
}