Передача данных сеанса между двумя разными приложениями - PullRequest
3 голосов
/ 03 ноября 2011

У меня есть два приложения, работающие на Tomcat, JSF 2 Mojarra 2. Оба приложения сопоставлены с одним и тем же доменом, но у каждого свой шаблон в этом домене.Одно приложение используется в качестве главной страницы, в то время как другое используется для доступа к защищенным ресурсам (не спрашивайте, почему не все в одном приложении, оно было специально разработано для разделения приложений на две разные сущности, каждая из которых отвечает за свою собственную вещь).Теперь возникает вопрос: возможно ли, и если да, то как передать состояние сеанса между этими двумя отдельными приложениями?Чтобы проиллюстрировать здесь несколько распространенных ситуаций:

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

  2. (Мне кажется, это несколько сложнее). Пользователь регистрируется в первом приложении и автоматически регистрируется после успешной регистрации в другом приложении.Приложение, в которое вам нужно войти, использует форму входа j_security_check (это будет сложная часть)

1 Ответ

3 голосов
/ 03 ноября 2011

Несколько способов:

  1. Храните данные в БД и идентифицируйте их по длинному, уникальному, трудно угадываемому автоматически сгенерированному ключу, который вы, в свою очередь, также храните в доменном cookie. Таким образом, оба приложения могут получать данные из БД на основе ключа, найденного в файле cookie.

  2. Предоставьте ServletContext обоих приложений друг другу. В Tomcat это вопрос добавления crossContext="true" к элементу <Context> context.xml веб-приложения. Таким образом, вы можете получить ServletContext друг друга с помощью ServletContext#getContext(). Наконец, поместите туда немного Map<String, SomeData>, которое обозначено некоторым идентификатором, который совместно используется обоими приложениями, например, идентификатором вошедшего в систему пользователя (вы должны только убедиться, что что один и тот же пользователь не может иметь более одного сеанса).

...