【发布时间】:2016-10-24 13:56:05
【问题描述】:
我有一个运行在 Tomcat 5 上的完美运行的 Web Java 1.5 Web 应用程序。该应用程序依赖于其会话,因此只要传递 Session 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&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 对应的会话?我想在将请求发送到我的“真实”应用程序之前在处理请求的同一抽象层中执行此操作。
【问题讨论】:
-
Cookie 设置在请求标头中。如果您获得的限制不允许您保持相同的会话,则必须对其进行更改。
-
相信我,我对此有过激烈的争论。他们的平台不能改变。是这样还是失去他们作为客户。
标签: java session tomcat jsessionid