Восстановление веб-сессии в Struts2 - PullRequest
0 голосов
/ 14 апреля 2010

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

Среди параметров мы передаем jsessionid и ожидаем, что когда удаленный сервер отправит запрос на наш сервер (через браузер клиента, перенаправляющий на наш сервер), сеанс будет таким же, как сеанс, использованный для отправки первоначального запроса на оплату. Этого не происходит, у нас есть два разных сеанса, хотя обработчик платежей включает в свой запрос наш оригинальный jsessionid (https://blabla/?jsessionid=something).

Как нам следует воссоздать сеанс в struts2, единственное, что связывает сеанс 'СТАРЫЙ' и 'НОВЫЙ', это jsessionid в URL-адресе запроса?

Есть идеи? Возможно ли это вообще или данные сеанса «СТАРЫЙ» удаляются, когда пользователь уходит с нашего сервера в совершенно другой домен обработчика платежей со своей формой ввода данных? Это объясняет нашу неспособность воссоздать сессию.

Большое спасибо за ваши ответы.

1 Ответ

2 голосов
/ 14 апреля 2010

Возможно (я не уверен), что это не очень хорошая практика, пытаться "привязать" себя к своей старой сессии (сервлету) с другого веб-сайта.

Понятно, что вы хотите, чтобы пользователь возвращался на ваш веб-сайт struts2 с платежного процессора, не запрашивая его учетные данные. Но чтобы «поддерживать сеанс в активном состоянии» в этом высокоуровневом смысле (с точки зрения пользователя, которому не требуется повторная аутентификация), не обязательно подразумевается, что вы хотите сохранить сеанс struts-servlet жив, чтобы привязаться к нему. Это кажется мне немного грязным и подверженным ненадежности - например, неясно (ни для пользователя, ни для разработчика), является ли исходная сессия открытой или закрытой в тот момент, когда пользователь находится на сайте оплаты (подумайте о действие "выйти из системы", когда он находится на сайте оплаты ... будет ли это также выход пользователя из исходного сайта?)

Я бы выбрал один из следующих сценариев:

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

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

По сути, я бы сказал, что это сомнительная практика (концептуально и намеренно) считать сеанс сервлета живым для окна браузера, которое не является живым (то есть оно было закрыто или заменено какой-либо страницей из другого веб-приложения).

Смотрите также здесь: http://nickcoblentz.blogspot.com/2008/09/jsessionid-regeneration-in-struts-2.html

...