Как передать значение сеанса в другое веб-приложение / проект в Java - PullRequest
5 голосов
/ 02 марта 2011

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

Предположим, у меня есть модуль входа, который отделен от моего другого модуля.

Вот мой пример кода:

Образец URL http://localhost:8080/Login

authorization.jsp: эта страница будет вызываться после того, как пользователь введет идентификатор пользователя, а затем отправит

page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"

HttpSession sessionid = request.getSession();
String userId = request.getParameter("userId");

sessionid.setAttribute("userId", userId); 
System.out.println("SESSION IS :" + sessionid.getAttribute("userId"));

response.sendRedirect("http://localhost:8080/OtherModule"); 

Образец URL http://localhost:8080/OtherModule

В моем домашнем сервлете я проверю, есть ли у сессии идентификатор пользователя

protected void doGet(HttpServletRequest request, HttpServletResponse response){
    HttpSession session = request.getSession();
    if(session.getAttribute("userId") != null){
        System.out.println("SESSION ID @ GET: " + session.getAttribute("userId"));
    } else {
        System.out.println("No Session for userId");
    }
}

//I also tried this with post but still I can't get the session

Надеюсь, эта информация поможет вам понять, что не так с моим кодом. Пожалуйста, помогите мне с этим. Спасибо

Ответы [ 3 ]

3 голосов
/ 02 марта 2011

Вам необходимо соответствующим образом настроить свой веб-сервер. Tomcat, например, обеспечивает клапан для этого. Смотрите здесь: http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Single_Sign_On

Примечание: локальный URL-адрес, который вы разместили, работает только на вашем компьютере (отсюда и название "local").

Было бы гораздо проще добавить все ваши модули в одно веб-приложение или использовать одну из бесчисленных структур Java-приложений.

2 голосов
/ 02 марта 2011

Если ваши общие данные связаны с аутентификацией / входом в систему, то, как говорит @Ridcully, SSO (единый вход) - это способ, которым управляет сервер приложений, и вашим приложениям не нужно беспокоиться о это.

Если проблема носит более общий характер - как обмениваться данными между веб-приложениями - тогда очень простой подход - использовать JNDI. Tomcat (и любой другой сервлет / сервер J2EE) предоставляют пространство поиска, которое может быть общим для всех веб-приложений, этот механизм чаще всего используется для определения конфигурации базы данных (или другого ресурса) вне приложений таким образом, чтобы их можно было использовать совместно.

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

1 голос
/ 02 марта 2011

Единая регистрация действительно решает проблему общего входа в систему пользователя.

Однако он не позволяет использовать один и тот же сеанс для всех развернутых веб-приложений. Если после всех ваших фактических намерений вам нужно установить атрибут emptySessionPath элемента <Connector> в /conf/server.xml на true.

<Connector ... emptySessionPath="true">

См. Также Документация по Tomcat 6.0 HTTP Connector .

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