【问题标题】:Path attribute of Cookie is not affecting for subsequent requestsCookie 的路径属性不影响后续请求
【发布时间】:2016-11-16 01:07:10
【问题描述】:

我有一个 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 服务响应的不同。任何想法这里出了什么问题?

【问题讨论】:

  • 换句话说,我无法覆盖 cookie 的默认“路径”属性值

标签: rest cookies path subdomain


【解决方案1】:

经过长时间的研究,我找到了根本原因。问题出在 cxf 库 3.1.6 上。在将 cookie 对象转换为标头时,它会引用特殊字符。 因此,它在 Set-Cookie 标头中将 java 代码中的 / 设置为“/”。但是浏览器将“/”视为无效并将路径设置为当前路径。

但是,3.1.7-SNAPSHOT 已经解决了这个问题。 在我将我的 cxf 库更新到上述版本后,问题就解决了。

如果我们不想更新库,我们可以手动设置 Set-Cookie 标头作为替代解决方案。

这里是参考: https://issues.apache.org/jira/browse/CXF-6862

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2019-01-20
    • 2018-08-21
    • 1970-01-01
    • 2018-07-13
    • 2015-12-12
    相关资源
    最近更新 更多