如何使用JSESSIONID设置特定会话?

时间:2016-06-22 14:34:00

标签: java session tomcat jsessionid

我有一个在Tomcat 5上运行的完美工作的Web Java 1.5 Web应用程序。该应用程序依赖于它的会话,所以只要会话Cookie被传递,或者JSESSIONID到达结束时一切正常。像这样的上下文路径“; jsessionid = ...”

我现在必须在这样的环境中使我的应用程序工作:

  • 我的应用程序的每个请求都只是一个URL的POST,没有任何参数(因此我无法在上下文路径中设置jsessionid)。
  • 不允许重定向,我必须使用我的响应返回HTTP状态200。
  • POST的主体是一个特定的XML(我可以在那里添加自定义参数)。

由于我的应用程序已经过时且运行良好,我希望无需更改所有内容即可完成此项工作。我能够通过添加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

它有效。我刚刚在我的应用程序中添加了一个抽象层,一切正常。会议除外......

由于没有发送会话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

但它不起作用。同样的事情,通过重定向,有效。但是,当然,在我的新要求中,不允许重定向。

最后,我的问题。如何设置与该J​​SESSIONID对应的会话?我想在将请求发送到我的“真实”应用程序之前处理请求的相同抽象层中执行此操作。

1 个答案:

答案 0 :(得分:0)

我想我已经为此提出了一个解决方案......我已经实现了一个代理,它解析XML然后在JSESSIONID就位的情况下发出新请求。然后,我将该请求的响应写入实际请求的响应。

我制作了一个原型,它似乎正在起作用。它真的很难看,但至少我的应用程序并不知道其中任何一个实际发生了。