JAX-RS, RestEasy: нет файла cookie сеанса - PullRequest
1 голос
/ 03 февраля 2012

Folks,

Раньше, когда вы нажимаете сервлет / jsp, сервер приложений автоматически запускал сеанс.Это поместит cookie-файл сессии в первый динамический ответ, который будет отслеживаться повсюду.

У меня есть бэкэнд отдыха, и я замечаю, что сессионные куки не торгуются.Поэтому я вручную добавляю код для отправки куки-файла JSESSIONID:

@Context 
private HttpServletRequest httpRequest;
// ...
@GET
@Path( "/{rcpGuid}" )
public Response myMethod( ... )
{
    final HttpSession session = httpRequest.getSession();
    final String sSessionId = session.getId();
    ...
    return Response.status( Response.Status.SEE_OTHER ).
        location( redirectUrl ).cookie( new NewCookie( "JSESSIONID", sSessionId ) );
}

Теперь это вызывает возврат 2 копий куки-файла JSESSIONID туда, где раньше не было заголовка Set-Cookie.Вот что я вижу сейчас в инспекторе моего браузера:

Set-Cookie:JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Path=/nn, JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Version=1

Мне все равно, пока это будет работать.Но, к сожалению, когда мой браузер запрашивает перенаправляемый URL-адрес (обратите внимание, что ответ «SEE_OTHER»), этот запрос не содержит идентификатор сеанса.Это приводит к тому, что мое приложение не работает правильно.

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012

Раньше, когда вы нажимаете сервлет / jsp, сервер приложений автоматически запускал сеанс.Он поместит cookie-файл сеанса в первый динамический ответ, который будет отслеживаться повсюду.

Сервер приложений не создает сеанс, пока не будет вызван httpRequest.getSession().

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

В вашем примере вы вызываете getSession() и создаете отдельный файл jsessionid.Это объясняет, почему у вас есть два куки.Если вы этого не сделаете, у вас вообще не будет jessionid.

0 голосов
/ 21 сентября 2017

Если это серверная часть REST, поэтому вы не должны иметь cookie-файл JSESSIONID и сохранять свои конечные точки как не имеющие состояния.

Вся информация, необходимая для получения результата от одного из ваших веб-сервисов, должна содержаться в запросе к веб-сервису. Веб-сервис идемпотентен.

...