【发布时间】: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