WebResponse中的addCookie重复Cookie-Header

时间:2015-07-21 14:06:51

标签: wicket

在我的wicket项目中,我必须在响应中添加一个cookie。所以我生成一个新的cookie并将其添加到WebResponse。

import javax.servlet.http.Cookie;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.http.WebResponse;

...
WebResponse webResponse = (WebResponse) RequestCycle.get().getResponse();
Cookie cookie = new Cookie("foo", "bar");
webResponse.addCookie(cookie);
...

除了将cookie-header设置两次这一事实外,它应该可以正常工作。

curl -I <myHost>/<myApplication>/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: foo=bar
Set-Cookie: foo=bar
Date: Tue, 21 Jul 2015 13:54:29 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store
Content-Type: text/html;charset=UTF-8

我发现wicket项目的jira没有错误,但可能是一个吗?或者我做错了吗?

1 个答案:

答案 0 :(得分:1)

"EDDYSTONE"只是将Cookie对象添加到webResponse.addCookie(),因此如果它已经在列表中,则再次添加它将在列表中添加第二个实例。您必须将Cookie添加到一个被调用两次的方法中。这就是你获得其中两个原因的原因。

您甚至无法检查Cookie是否已添加,因为WebResponse不提供ArrayList方法。

您可以做的是在添加Cookie之前清除Cookie:

getCookie()

如果这不起作用,另一种解决方案是使用标志来指示Cookie是否已被添加:

WebResponse webResponse = (WebResponse) RequestCycle.get().getResponse();

Cookie cookie = new Cookie("foo", "bar");
webResponse.clearCookie(cookie);
webResponse.addCookie(cookie);