我有一个REST Web服务,它在响应中发送一个cookie。 REST URL看起来像 http://localhost:8080/myfoo/service/v1/acc/login
在我的java代码中,我设置了如下的cookie
Response.ok(entity).cookie(new NewCookie("JSESSIONID", "12344", "/", "localhost", null, -1, false));
当我看到Web服务的响应头时,cookie标题如下所示
"JSESSIONID=12344;Domain=localhost;Path="/";Version=1"
但是,当我向同一个域的另一条路径发出请求时,如下所示
http://localhost:8080/mybar/service/v1/acc/profile
请求中不会发送cookie。
所以,当我在浏览器商店中查看cookie时(使用内容设置),我在下面看到了cookie的条目。
Name: JSESSIONID
Content: 12344
Domain: localhost
Path: /myfoo/service/v1/acc/login
Send for: Any kind of connection
Accessible to script: Yes
Created: Wednesday, July 13, 2016 at 5:04:40 PM
Expires: When the browsing session ends
因此,如果您注意到,浏览器存储中cookie的路径属性与REST服务响应的路径属性不同。有什么想法在这里出错吗?
答案 0 :(得分:0)
经过长时间的研究,我找到了根本原因。问题出在cxf库3.1.6上。将cookie对象转换为标题时,它会引用特殊字符。 因此,它在Java代码中引用/设置为Set-Cookie标头中的“/”。但是浏览器将“/”视为无效并将路径设置为当前路径。
但是,3.1.7-SNAPSHOT已经解决了这个问题。 将我的cxf库更新到上述版本后,问题就解决了。
如果我们不想更新库,我们可以手动设置Set-Cookie标头作为替代解决方案。