2015-04-23 1 views
0

У меня есть (1) приложение Tomcat Server. Он проксирование вызовов на второй (2) App Server (третья сторона), как в:Проблема JSESSIONID Когда Tomcat Server выступает в качестве прокси для другого сервера Tomcat

Конечного пользователя -> Мой (1) сервер Tomcat приложения -> второй (2) App Сервер

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

Второй (2) сервер приложений затем генерирует JESSIONID. Мне нужно, чтобы JESSIONID был тем, который связан с конечным пользователем, который взаимодействует с моим (1) сервером Tomcat.

Проблема заключается в том, что второй (2) сервер приложений поддерживает один сеанс с My (1) Tomcat Server, так что если несколько конечных пользователей взаимодействуют с My (1) сервером Tomcat, все они заканчиваются совместное использование одного сеанса.

(я надеюсь, что имело смысл)

Что такое правильный способ справиться с этой ситуацией?

Спасибо за любую помощь!

+0

Если вы используете HttpClient из Tomcat 1 -> Tomcat 2, и у вас есть глобальное соединение, возможно, это управление cookies по всему миру. Вы захотите изменить эти подключения для каждого пользователя, а не для общего доступа. –

ответ

0

Как вы вызываете app2 из app1? Использование клиентской библиотеки http или что-то подобное?

Проблема, кажется, что вторая (2) App сервер сохранения одной сессии с My (1) сервером Tomcat, так что если несколько конечных пользователей взаимодействуют с My (1) сервер Tomcat, они все в конечном итоге используют один сеанс.

Я вижу 2 варианта

  1. Вы можете хранить JSESSIONID второго приложения в сессии первого приложения. Каждый раз, когда вы проксируете второе приложение из первого, найдите первый JSESSIONID второго приложения из сеанса пользователя в первом и включите его в свой запрос

  2. При первом получении JSESSIONID из приложения 2 отправьте файл cookie обратно в ответ пользователю. Каждый последующий вызов будет автоматически иметь JSESSIONID, втекающий в app1, который будет проксироваться к app2. Но для этого вам придется изменить имя cookie сеанса для приложения 1 на что-то другое.

+0

Я вызываю app2 с CloseableHttpClient httpclient.execute(). – Randy

+0

Кроме того, я вообще не использую сеансы в (1) моем приложении. – Randy

+0

Я ранее пробовал что-то похожее на ваше первое предложение, но мое приложение Tomcat Server (1) настаивает на отправке одного сохраненного JESSIONID, который я не могу удалить. Если я добавлю JSESSIONID, из которого я получил cookie конечного пользователя, добавьте это в мой запрос на (2) сервер приложений, это не сработает, потому что исходный JSESSIONID, который отправляет мое (1) приложение Tomcat Server, отправляется _also_. – Randy