Установка идентификатора сеанса Tomcat 7 и значения, которые будут идентифицированы с помощью аппаратной балансировки нагрузки для сходства сеансов

Хотя с моей точки зрения это легко сделать с помощью IIS, я полный новичок в Tomcat и понятия не имею, как установить статические значения для содержимого файлов cookie. Да, я прочитал о последствиях для безопасности и в конечном итоге буду получать доступ через SSL, поэтому меня это не беспокоит. Кроме того, я прочитал спецификацию Servlet 3.0 о том, что значение не меняется, и я принимаю это.

В IIS я бы просто установил заголовок HTTP с именем Set-Cookie с произвольной настройкой WebServerSID и значением 1001.

Затем в VIP-балансировщике нагрузки, содержащем эту группу реальных серверов, установите значение WebServerSID на уровне VIP, а для первого веб-сервера значение cookie 1001 и так по одному для остальных машин 1002 для сервера 2, 1003 для сервера 3.

Это обеспечивает сходство сеансов с помощью файлов cookie до тех пор, пока клиент не закроет браузер.

Как это можно сделать с Tomcat 7.0.22?

Я вижу, что между Tomcat 6.x и 7.x произошло много изменений конфигурации в отношении файлов cookie и их настройки. Я пробовал следующее после обширных исследований за последнюю неделю.

В web.xml: (это отключит перезапись URL в Tomcat 7.x) <tracking-mode>COOKIE</tracking-mode> под элементом сеанса по умолчанию

В context.xml: (файлы cookie по умолчанию верны, но я указал явно, так как не могу заставить его работать)

cookies=true
sessionCookiePath=/
sessionCookieName=WebServerSID
sessionCookieName=1001

У меня есть 2 записи в context.xml для sessionCookieName, потому что эквивалентные команды из Tomcat 6.x выглядят так, как будто они были объединены в 1. См. http://tomcat.apache.org/migration-7.html#Tomcat_7.0.x_configuration_file_differences

Извлекать:

Системное свойство org.apache.catalina.SESSION_COOKIE_NAME: оно было удалено. Аналогичный эффект можно получить, настроив атрибут sessionCookieName для глобального context.xml (в CATALINA_BASE/conf/context.xml). Системное свойство org.apache.catalina.SESSION_PARAMETER_NAME: оно было удалено. Аналогичный эффект можно получить, настроив атрибут sessionCookieName для глобального context.xml (в CATALINA_BASE/conf/context.xml).

Если это неправильно, то я просто не понимаю требуемый синтаксис и не могу найти нигде, где это было бы просто написано черным по белому.

В Tomcat 6.x я бы использовал параметры Java в конфигурации, например:

-Dorg.apache.catalina.SESSION_COOKIE_NAME=WebServerSID
-Dorg.apache.catalina.SESSION_PARAMETER_NAME=1001

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

Все эти настройки находятся в файлах context/web/server.xml на базе Catalina.

В конце концов, что мне нужно увидеть в заголовках ответов в Set-Cookies: (как видно с помощью Fiddler):

SID веб-сервера = 1001

НЕТ

JSESSIONID=as8sd9787ksjds9d8sdjks89s898

заранее спасибо

С уважением


person Aaron    schedule 16.05.2012    source источник


Ответы (1)


Лучшее, что вы можете сделать исключительно с настройкой, — установить атрибут jvmRoute для Engine. который добавит постоянное значение в конец идентификатора сеанса. Большинство балансировщиков нагрузки могут справиться с этим. Это будет выглядеть так:

JSESSIONID=as8sd9787ksjds9d8sdjks89s898.route1

Если этого недостаточно и вам нужно WebServerSID=1001, вам придется написать ServletFilter и настроить его так, чтобы он добавлял заголовок к каждому ответу.

person Mark Thomas    schedule 16.05.2012
comment
Я изучил компонент jvmRoute, но не хотел его пробовать. Причина в том, что я не смог найти ничего в документации по балансировщику нагрузки, предполагающей, что компонент sessionid будет просто проигнорирован, и будет прочитана только определяющая часть route1. Я обнаружил, что могу сделать ‹Manager sessionIdLength=0 /› и установить для jvmRoute значение 1001. Это оставило бы JSESSIONID=.1001, но тогда я не смог заставить sessionCookieName=WebServerSID сыграть свою роль. Он просто не работает, что-то с ним не так. Это дало бы мне WebServerSID = .1001, и на данном этапе это достаточно хорошо, но не может. - person Aaron; 17.05.2012
comment
И всегда хочется понять, где я ошибся в этих вопросах, что не так с этими записями? sessionCookieName=WebServerSID sessionCookieName=1001 - person Aaron; 17.05.2012
comment
Пример, приведенный в документации балансировщика нагрузки для команды JavaScript для переключения файлов cookie, был SetCookie("ServerID","1") и см. RFC 2109. Имеет ли это какое-либо значение для того, как этого можно достичь? - person Aaron; 17.05.2012
comment
С чего мне начать писать сервлет для этого? Я знаю об этом абсолютно НОЛЬ, поэтому любые ссылки должны быть уместными. - person Aaron; 18.05.2012
comment
Хорошо, тогда это было тихо слишком долго. Сколько будет стоить написать фильтр сервлетов, предложенный Марком? Как быстро это можно сделать с некоторой документацией по реализации? - person Aaron; 23.05.2012
comment
Марк, Большое спасибо, я посмотрю, что у меня получится с этим. С уважением - person Aaron; 25.05.2012