【问题标题】:CXF issue with cookies using ChromeCXF 使用 Chrome 的 cookie 问题
【发布时间】:2016-12-30 10:08:01
【问题描述】:

最近我遇到了将 cookie 发送到我的后端服务器(使用 CXF 3.1.2 处理 HTTP 请求)的奇怪问题,它引发了一个异常:

java.lang.IllegalArgumentException: Cookie is malformed :
        at org.apache.cxf.jaxrs.impl.CookieHeaderProvider.fromString(CookieHeaderProvider.java:66) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2]
        at org.apache.cxf.jaxrs.impl.CookieHeaderProvider.fromString(CookieHeaderProvider.java:26) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2]
        at javax.ws.rs.core.Cookie.valueOf(Cookie.java:126) ~[javax.ws.rs-api-2.0.1.jar:2.0.1]
        at org.apache.cxf.jaxrs.impl.HttpHeadersImpl.getCookies(HttpHeadersImpl.java:117) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2]
        at org.apache.cxf.jaxrs.impl.AbstractRequestContextImpl.getCookies(AbstractRequestContextImpl.java:59) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2]
        at com.acmecorp.acmeproject.whitelist.filter.AuthenticationInFilter.filter(AuthenticationInFilter.java:34) ~[AuthenticationInFilter.class:na]
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.runContainerRequestFilters(JAXRSUtils.java:1636) ~[cxf-rt-frontend-jaxrs-3.1.2.jar:3.1.2]

当我使用 Chrome 或 Opera 时偶尔会发生这种情况,但在 Firefox 或 IE 中没有重现。 在 CXF 日志中,我发现下一个 HTTP 标头被发送到服务器:

标题:{Accept=[application/json, text/plain, /], 接受编码=[gzip,放气,lzma], Accept-Language=[en-US,en;q=0.8], Cookie=[BlueStripe.PVN=300d00000051; APP_USER="test_user1"; ; SMSESSION=(省略)] }

问题在于标题中的双分号,它们之间有空格。 CXF 将其视为无名称无值的 cookie 并抛出异常。

此问题可能与每分钟左右过期的 Siteminder SMSESSION cookie 有关。

任何帮助将不胜感激。

【问题讨论】:

  • 你检查答案了吗?正如我所说,不看客户端代码是不可能完全回答的
  • Pedrofb,非常感谢您的帮助。将尝试深入研究此问题并尽快给予回复。谢谢。
  • 我发现这个问题可能与我们用于实施 SSO 的 Siteminder 有关。它添加 SMSESSION cookie 来请求并每分钟更改一次。而且这个异常只发生在这个时间间隔内,当Siteminder应该更新一个SMSESSION cookie值时(我用旧cookie值提交HTTP请求,它拦截请求并更改cookie,但留下空白值''导致CXF崩溃)

标签: google-chrome cookies cxf siteminder


【解决方案1】:

符合RFC6265 的有效Cookie: 标头应该是

 Cookie: name=value *(; name=value)

一个或多个name=value 对,以分号和空格; 分隔。您的 cookie 无效,因为第三个条目无效。

在服务器端,CXF CookieHeaderProvider.fromString(cookie) 抛出 IllegalArgumentException 因为名称/值为空。这不是 CXF 错误,因为 cookie 不符合规范

我在Chrome issue list 中没有发现任何相关的错误,所以我怀疑是客户端问题

下一步是确定空白 cookie ; 包含在哪里

  1. 在调用之前调试客户端代码以查看当前的 cookie 集
  2. 检查 http 请求标头并检查 Cookie:

如果您发布客户端代码和调试器结果会很有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多