2016-12-30 4 views
2

Недавно я столкнулся странные проблемы с куки отправляются на мой бэкэнда сервер (который использует CXF 3.1.2 для обработки HTTP-запросов), он бросает исключение:CXF проблема с печеньем с помощью Chrome

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 = [приложения/JSON, текст/равнина, /], Accept-Encoding = [GZIP, выкачать , lzma], Accept-Language = [en-US, en; q = 0.8], Cookie = [BlueStripe.PVN = 300d00000051; APP_USER = "test_user1"; ; SMSESSION = (опущено)]}

Проблема заключается в двойной точке с запятой в заголовках с пространством между ними. CXF рассматривает его как файл cookie, который не имеет имени и не имеет значения и выдает исключение.

Эта проблема может быть связана с файлом cookie Siteminder SMSESSION, срок действия которого истекает каждую минуту.

Любая помощь будет высоко оценена.

+0

Вы проверили ответ? Как я уже сказал, невозможно полностью ответить, не видя код клиента – pedrofb

+0

Pedrofb, я очень ценю вашу помощь. Попытайтесь разобраться в этом вопросе и дать ответ как можно скорее. Благодарю. – stinger

+0

Я обнаружил, что эта проблема может быть связана с Siteminder, которую мы используем для реализации SSO. Он добавляет cookie SMSESSION для запроса и изменения его каждую минуту. И это исключение возникает только в этом временном интервале, когда Siteminder должен обновить значение cookie SMSESSION (я отправляю HTTP-запрос со старым значением cookie, он перехватывает запрос и изменяет cookie, но оставляет пустое значение '', которое приводит к сбою CXF) – stinger

ответ

1

Действительный Cookie: заголовок в соответствии с RFC6265 должен быть

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

Один или несколько name=value паров разделенных точкой с запятой и пространством ;. Ваш файл cookie недействителен, поскольку третья запись недействительна.

На стороне сервера CXF CookieHeaderProvider.fromString(cookie) выбрасывает IllegalArgumentException, потому что имя/значение равно null. Это не ошибка CXF, потому что куки не соответствует спецификации

я не нашел каких-либо связанных с ними ошибок в Chrome issue list, так что я подозреваю, что это проблема клиента

Следующий шаг заключается в определении, где находится beign включен пустой печенье ;

  1. Debug код клиента перед вызовом, чтобы увидеть текущий набор печенья
  2. Осмотреть заголовки запроса HTTP и проверить Cookie: значение

Было бы полезно, если вы разместите код клиента и результаты отладчика

Смежные вопросы