Не удается выйти из Tomcat с помощью Firefox - PullRequest
2 голосов
/ 20 октября 2011

Я столкнулся с довольно неожиданной проблемой при использовании авторизации Tomcat и CAS. Я просто не могу выйти из Firefox. Я перенаправлен на страницу выхода из системы, но как только я повторно ввожу URL-адрес приложения в адресной строке, он открывается, как будто я вошел в систему (и фактически вошел в систему!).

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

В других браузерах все работает так, как ожидалось. А я просто застрял и был бы признателен, если бы мне дали подсказку.

Полагаю, [этот вопрос] [1] в некотором роде связан с моим, но, кстати, отключение кэширования на странице, на которой я должен быть зарегистрирован, также не помогает.

UPD: Некоторая отладочная информация. Firefox версии 7.0.1, к сожалению, это не публичное приложение, и я не могу предоставить URL. Похоже, что output.sendRedirect - это то, чего не хватает в Firefox. Вот минимальный код, который работает в любом браузере, кроме Firefox.

 session.invalidate();
 response.sendRedirect("https://app:8552/cas/logout"); 

HEADERS 1-й ЗАПРОС - который делает недействительным сеанс и перенаправляет на страницу выхода из CAS

ЗАПРОСИТЕ ЗАГОЛОВКИ

  • Хост: dev.service.net
  • Пользователь-агент: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10.6; rv: 7.0.1) Gecko / 20100101 Firefox / 7.0.1
  • Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, / ; q = 0,8
  • Accept-Language: en-us, en; q = 0,5
  • Accept-Encoding: gzip, deflate
  • Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
  • Соединение: keep-alive
  • Рефери: http://dev.service.net/
  • Cookie: JSESSIONID = 53B9469EFE9F130E9694F7406BFAB755

ОТВЕТНЫЕ ГОЛОВКИ

  • Сервер: nginx / 1.0.4
  • Дата: четверг, 20 октября 2011 г. 09:20:45 GMT
  • Тип содержимого: текст / html
  • Длина содержимого: 184
  • Расположение: https://dev:8552/cas/logout

2-й запрос - сама страница выхода из системы

ЗАПРОСИТЕ ЗАГОЛОВКИ

  • Хост: dev: 8552
  • Пользователь-агент: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10.6; rv: 7.0.1) Gecko / 20100101 Firefox / 7.0.1
  • Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, / ; q = 0,8
  • Accept-Language: en-us, en; q = 0,5
  • Accept-Encoding: gzip, deflate
  • Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
  • Соединение: keep-alive
  • Рефере: http://dev.service.net/
  • Cookie: JSESSIONID = 8A68F008825A0F0D14C6BF803E1332CF; GUEST_LANGUAGE_ID = en_US; COOKIE_SUPPORT = истина

ГОЛОВКИ ОТВЕТА

  • Сервер: Apache-Coyote / 1.1
  • Прагма: без кэша
  • Истекает: чт, 1 января 1970 г. 00:00:00 по Гринвичу
  • Cache-Control: без кеша, без хранилища
  • Тип содержимого: текст / html; кодировка = UTF-8
  • Content-Language: en-US
  • Длина содержимого: 1226
  • Дата: четверг, 20 октября 2011 г., 15:53:57 GMT

3-й ЗАПРОС - мы возвращаемся на страницу, которая должна перенаправить нас на страницу входа, но это не так.

ЗАПРОСИТЕ ЗАГОЛОВКИ

  • Хост: dev.service.net
  • Пользователь-агент: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10.6; rv: 7.0.1) Gecko / 20100101 Firefox / 7.0.1
  • Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9, / ; q = 0,8
  • Accept-Language: en-us, en; q = 0,5
  • Accept-Encoding: gzip, deflate
  • Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0,7
  • Соединение: keep-alive
  • Cookie: JSESSIONID = 53B9469EFE9F130E9694F7406BFAB755

ГОЛОВКИ ОТВЕТА

  • Сервер: Apache-Coyote / 1.1
  • Прагма: без кеша
  • Истекает: чт, 1 января 1970 г. 00:00:00 по Гринвичу
  • Cache-Control: без кеша, без хранилища
  • Content-Type: text / html; charset = UTF-8
  • Content-Language: en-US
  • Длина содержимого: 1226
  • Дата: четверг, 20 октября 2011 г. 13:30:51 GMT

1 Ответ

2 голосов
/ 20 октября 2011

Согласно заголовкам, вы поддерживаете два разных сеанса на двух разных хостах. Когда вы запрашиваете выход из системы на первом хосте, вы перенаправляетесь на второй хост (который использует другой файл cookie сеанса). Сеансовый cookie второго хоста, в свою очередь, действительно признан недействительным (в соответствии с наличием заголовка Set-Cookie). Но на основании последнего запроса сеанс не был воссоздан на стороне сервера (заголовок Set-Cookie отсутствует). Это означает, что за session.invalidate() до response.sendRedirect() произошел сбой или что страница фактически запрашивается из кэша браузера.

В Firebug вы сможете увидеть, запрашивается ли страница из кэша браузера, проверив цвет текста запроса на вкладке Net . Если он неактивен, то это означает, что он был получен из кэша браузера. Для Firefox заголовок must-revalidate на самом деле является обязательным рядом с заголовками no-cache, no-store. Вам необходимо настроить сервер, чтобы добавить эту запись в заголовок или изменить / создать Filter для этого.

Смотри также:

...