Как я могу установить конкретный сеанс с JSESSIONID?

У меня есть отлично работающее веб-приложение 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&amp;param1=value1&amp;param2=value2</parameters>
</xml>

Затем я пересылаю это по адресу:

http://server.com/realPage.do?param1=value1&param2=value2

И это работает. Я просто добавил в свое приложение уровень абстракции, и все работает нормально. Кроме сеанса ...

Поскольку файлы cookie сеанса никогда не отправляются, я теряю сеанс между POST. Я добавил JSESSIONID в качестве одного из настраиваемых параметров в XML, например:

<xml>
  <parameters>url=realPage.do&amp;param1=value1&amp;param2=value2&amp;jsessionid=ABC121312</parameters>
</xml>

И попробовал переадресовать на:

http://server.com/realPage.do;jsessionid=ABC121312?param1=value1&param2=value2

Но это не работает. То же самое с редиректом работает. Но, конечно, в моем новом требовании перенаправления запрещены.

Напоследок мой вопрос. Как я могу установить сеанс, соответствующий этому JSESSIONID? Я хотел бы сделать это на том же уровне абстракции, на котором обрабатываются запросы перед их отправкой в ​​мое «настоящее» приложение.


person manugarciac    schedule 22.06.2016    source источник
comment
Файлы cookie устанавливаются в заголовке запроса. Если предоставленные вами ограничения не позволяют поддерживать тот же сеанс, их придется изменить.   -  person user207421    schedule 22.06.2016
comment
Поверьте, у меня был жаркий спор по этому поводу. Их платформу изменить нельзя. Либо это так, либо потеря их как клиента.   -  person manugarciac    schedule 22.06.2016


Ответы (1)


Думаю, я нашел решение для этого ... Я реализовал прокси, который анализирует XML, а затем делает новый запрос с JSESSIONID на месте. Затем я пишу ответ на этот запрос в ответ на настоящий запрос.

Я сделал прототип, и он вроде работает. Это действительно уродливо, но, по крайней мере, мое приложение не знает, что что-то из этого происходит на самом деле.

person manugarciac    schedule 22.06.2016