Задаване на Tomcat 7 sessionid и стойност, които да бъдат идентифицирани чрез хардуерно балансиране на натоварването за афинитет на сесията

Въпреки че е лесно да се направи от моя гледна точка с IIS, аз съм пълен нооб за Tomcat и нямам представа как да задавам статични стойности за съдържанието на бисквитките. Да, прочетох последиците за сигурността и в крайна сметка ще осъществя достъп чрез SSL, така че не се притеснявам. Освен това прочетох спецификацията на Servlet 3.0 за това да не променям стойността и приемам това.

В IIS просто бих задал HTTP Header с име Set-Cookie с произволна настройка на WebServerSID и стойност 1001.

След това във VIP за балансиране на натоварването, съдържащ тази група от реални сървъри, задайте стойността WebServerSID на ниво VIP и за първия уеб сървър стойност на бисквитка 1001 и така една за останалите машини 1002 за сървър 2, 1003 за сървър 3.

Това постига афинитет на сесията чрез бисквитки, докато клиентът затвори браузъра.

Как може да стане това с Tomcat 7.0.22?

Виждам, че са настъпили много промени в конфигурацията между Tomcat 6.x и 7.x по отношение на бисквитките и начина, по който са настроени. Опитах следното след задълбочено проучване през последната седмица.

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

В context.xml: (бисквитките са true по подразбиране, но бях изричен, тъй като не мога да го накарам да работи)

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), е:

WebServerSID=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 команда за превключване на бисквитки, беше SetCookie("ServerID","1") и се консултирайте с RFC 2109. Има ли някаква разлика в начина, по който това може да бъде постигнато? - person Aaron; 17.05.2012
comment
Откъде да започна с писането на сървлет за това? Знам абсолютно НУЛА за това, така че всички връзки трябва да са подходящи. - person Aaron; 18.05.2012
comment
Добре тогава, това беше тихо твърде дълго. Колко ще струва някой да напише Servlet Filter, както е предложено от Mark? Колко бързо може да се направи с някаква документация за внедряване? - person Aaron; 23.05.2012
comment
Марк, благодаря много, ще видя какво мога да направя с това. за разбирането - person Aaron; 25.05.2012