Вам просто нужно убедиться, что запрос обратного вызова инструктирует сервер каким-либо образом использовать тот же сеанс в качестве начального запроса. Обычно это необходимо сделать, установив 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. Таким образом, вам не нужно беспокоиться о сессии.