如何使用 JSESSIONID 设置特定的 session?

How can I set an specific session with the JSESSIONID?

我有一个完美运行的 web Java 1.5 web 应用程序,它在 Tomcat 5 上运行。该应用程序依赖于它的 session,所以只要 Session Cookie 被四处传递,或者 JSESSIONID 像这样出现在上下文路径的末尾 ";jsessionid=..."

我现在必须让我的应用程序在这样的环境中运行:

因为我的应用程序很旧而且运行良好,所以我想在不必更改所有内容的情况下完成这项工作。通过在 XML 主体中添加参数之一,我能够使单个 URL 工作,应该执行的实际 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

并且有效。我刚刚在我的应用程序中添加了一个抽象层,一切正常。除了 session...

由于从未发送过 session cookie,因此我在 POST 之间丢失了 session。我将 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 的 session?我想在将请求发送到我的 "real" 应用程序之前在处理请求的同一抽象层中执行此操作。

我想我已经想出了一个解决方案...我已经实现了一个代理,它解析 XML 然后发出一个新的请求,JSESSIONID 就位。然后我把那个请求的响应写在真实请求的响应上。

我制作了一个原型,它似乎可以正常工作。这真的很难看,但至少我的应用程序不知道这一切正在发生。