У меня есть отлично работающее веб-приложение Java 1.5, работающее на Tomcat 5. Приложение зависит от своего сеанса, поэтому все работает хорошо, пока передается файл cookie сеанса или JSESSIONID находится в конце пути контекста, например это "; jsessionid = ..."
Теперь мне нужно заставить мое приложение работать в такой среде:
- Каждый запрос к моему приложению будет POST только для одного URL без каких-либо параметров (поэтому я не смогу установить jsessionid в пути контекста).
- Никакие перенаправления не разрешены, я должен вернуть HTTP-статус 200 с моим ответом.
- Тело POST - это конкретный XML (я могу добавить туда настраиваемые параметры).
Поскольку мое приложение старое и работает хорошо, я хотел, чтобы это работало, не меняя все. Мне удалось заставить работать с одним URL-адресом, добавив в качестве одного из параметров в теле XML фактический URL-адрес, который должен быть выполнен, а затем перенаправить ответ на этот URL-адрес, также добавив туда остальные параметры. Вот пример:
POST http://server.com/singleUrl.do
<xml>
<parameters>url=realPage.do&param1=value1&param2=value2</parameters>
</xml>
Затем я пересылаю это по адресу:
http://server.com/realPage.do?param1=value1¶m2=value2
И это работает. Я просто добавил в свое приложение уровень абстракции, и все работает нормально. Кроме сеанса ...
Поскольку файлы cookie сеанса никогда не отправляются, я теряю сеанс между POST. Я добавил JSESSIONID в качестве одного из настраиваемых параметров в XML, например:
<xml>
<parameters>url=realPage.do&param1=value1&param2=value2&jsessionid=ABC121312</parameters>
</xml>
И попробовал переадресовать на:
http://server.com/realPage.do;jsessionid=ABC121312?param1=value1¶m2=value2
Но это не работает. То же самое с редиректом работает. Но, конечно, в моем новом требовании перенаправления запрещены.
Напоследок мой вопрос. Как я могу установить сеанс, соответствующий этому JSESSIONID? Я хотел бы сделать это на том же уровне абстракции, на котором обрабатываются запросы перед их отправкой в мое «настоящее» приложение.