Обработка сеансов в приложении Java EE - PullRequest
5 голосов
/ 31 марта 2011

Я разрабатываю систему для обработки финансовых транзакций, полученных клиентскими торговыми системами, и это замена существующей системы, которую мы приобрели у поставщика. Клиентский интерфейс должен вызывать экраны аутентификации пользователя и обработки транзакций из нашей системы.

Функциональность системы выглядит следующим образом,

  1. Получать входные параметры с сайта продавца
  2. Подтвердите его
  3. Аутентификация пользователей (пользователи зарегистрированы в нашей системе, и мы должны вызвать наш экран входа в систему)
  4. Обработка транзакции
  5. Возвращение статуса ответа продавцу

Один ответ получен, клиент должен проверить данные транзакции по значениям, находящимся в сеансе.

Обзор системы можно изобразить следующим образом:

enter image description here

( нажмите здесь, чтобы увидеть полный размер изображения )

Моя проблема в том, что клиент не может сохранить сеанс после того, как мы отвечаем клиенту. Но та же функциональность может быть достигнута системой, которую мы приобрели у поставщика (у нас нет исходного кода для анализа внутренней структуры кодирования). Я надеюсь, что что-то не так с тем, как мы реагируем на клиента.

Как мне преодолеть эту проблему?

Мы используем Java 1.4.2, сервер приложений Websphere

1 Ответ

6 голосов
/ 31 марта 2011

Есть много вещей, которые могут заставить сеанс исчезнуть. Я бы посоветовал отследить их и проверить, все ли в порядке. Это легче сделать, если вы понимаете , как работают сессии.

  • Время сеанса истекло. Обычно по умолчанию это 30 минут. Это настраивается с помощью <session-timeout> в web.xml, где вы можете указать время ожидания в минутах. Вы можете реализовать HttpSessionListener для отслеживания создания и уничтожения сеанса с помощью регистратора.

  • Сессия была принудительно признана недействительной. Это происходит, когда код вызывает HttpSession#invalidate(). Это можно отследить и с HttpSessionListener.

  • Файл cookie сеанса исчез. Сессии поддерживаются куки. Если сеанс создан, сервер добавит заголовок Set-Cookie с идентификатором сеанса. Клиент должен отправить тот же cookie обратно, что и заголовок Cookie во всех последующих запросах по (контекстному) пути, как указано в заголовке Set-Cookie. Это можно отследить в мониторе HTTP-трафика (вкладка «Сеть») встроенного в браузер набора инструментов веб-разработчика (нажмите F12 в Chrome / Firefox23 + / IE9 +). Файлы cookie доступны для всех веб-приложений в одном домене cookie. Кроме того, если ServletC2 работает в другом контексте веб-приложения, чем ServletC1, он не будет использовать тот же сеанс. Кроме того, если «серверное» веб-приложение работает в том же домене, то теоретически оно способно уничтожить все файлы «клиентского» веб-приложения.

  • Клиент не поддерживает куки. Хорошо разработанное веб-приложение использует перезапись URL-адреса с помощью jsessionid для отслеживания клиентов без файлов cookie между запросами одного и того же веб-приложения. Но второе веб-приложение должно делать то же самое при перенаправлении обратно на первое веб-приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...