Как мне сохранить значение в сеансе, к которому необходимо будет получить доступ по запросу обратного вызова со стороннего сайта? - PullRequest
1 голос
/ 14 августа 2011

Я хочу сохранить переменную в данных сеанса, в сервлете.Сервлет перенаправляет пользователя на сторонний сайт, а со стороннего сайта пользователь отправляется на страницу JSP в том же веб-приложении.Я хочу получить доступ к переменной сеанса, сохраненной сервлетом (до перенаправления на сторонний сайт) в JSP.Как мне сохранить такой объект в сервлете?И как мне получить доступ к этому объекту из файла JSP?

1 Ответ

0 голосов
/ 14 августа 2011

Вам просто нужно убедиться, что запрос обратного вызова инструктирует сервер каким-либо образом использовать тот же сеанс в качестве начального запроса. Обычно это необходимо сделать, установив cookie-файл сеанса в заголовок запроса. Но сторонний сайт не собирается этого делать. Однако Servlet API предлагает вам возможность идентифицировать сеанс по фрагменту JSESSIONID в URL.

Так что, если вы создаете свой URL обратного вызова, как показано ниже,

HttpSession session = request.getSession();
session.setAttribute("someName", someObject);

String callbackURL = "http://yourhost.com/callback.jsp;JSESSIONID=" + session.getId();
String redirectURL = "http://otherhost.com/process?callbackURL=" + URLEncoder.encode(callbackURL, "UTF-8");

response.sendRedirect(redirectURL);

Таким образом, callback.jsp будет иметь доступ к тому же сеансу и, следовательно, ко всем сохраненным атрибутам. Кстати, вы действительно должны использовать здесь сервлет с doGet(), так как предварительная обработка кода Java не принадлежит JSP.


Помимо конкретного вопроса, есть еще один способ добиться этого: сохранить интересующую информацию в области приложения с помощью длинного, автоматически сгенерированного и уникального ключа (например, java.util.UUID) и добавить его в качестве параметра запроса в обратный вызов URL. Когда необходимо выполнить обратный вызов, просто получите его из области приложения, а не из области сеанса. Обычно это делается во всплывающем окне, которое обновляет родительское окно и закрывается после успешной обработки обратного вызова JavaScript. Таким образом, вам не нужно беспокоиться о сессии.

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