Атрибут Path для Cookie не влияет на последующие запросы
У меня есть веб-служба REST, которая отправляет cookie в ответ.
URL-адрес REST выглядит так:
http://localhost:8080/myfoo/service/v1/acc/login
В моем java-коде я установил cookie, как показано ниже
Response.ok(entity).cookie(new NewCookie("JSESSIONID", "12344", "/", "localhost", null, -1, false));
Когда я вижу заголовок ответа веб-службы, заголовок файла 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. Какие-нибудь идеи что здесь не так?
Ответы
Ответ 1
После долгого исследования я нашел основную причину. Проблема была в библиотеке cxf 3.1.6. При преобразовании объектов cookie в заголовки он цитирует специальные символы.
Следовательно, в заголовке Set-Cookie он указывал/устанавливал код java на "/". Но браузер видит "/" как недопустимый и устанавливает путь к текущему пути.
Но, 3.1.7-SNAPSHOT исправляет это.
После того, как я обновил свою библиотеку cxf до указанной выше версии, проблема будет решена.
Если мы не хотим обновлять библиотеку, мы можем вручную установить заголовок Set-Cookie в качестве альтернативного решения.
Вот ссылка:
https://issues.apache.org/jira/browse/CXF-6862