【问题标题】:How can I set an specific session with the JSESSIONID?如何使用 JSESSIONID 设置特定会话?
【发布时间】: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&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 对应的会话?我想在将请求发送到我的“真实”应用程序之前在处理请求的同一抽象层中执行此操作。

【问题讨论】:

  • Cookie 设置在请求标头中。如果您获得的限制不允许您保持相同的会话,则必须对其进行更改。
  • 相信我,我对此有过激烈的争论。他们的平台不能改变。是这样还是失去他们作为客户。

标签: java session tomcat jsessionid


【解决方案1】:

我想我已经为此想出了一个解决方案...我已经实现了一个代理,它解析 XML,然后发出一个新的请求,并使用 JSESSIONID。然后我将该请求的响应写在真实请求的响应上。

我已经制作了一个原型,它似乎正在工作。这真的很难看,但至少我的应用程序不知道这实际上正在发生。

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 2016-11-30
    • 1970-01-01
    • 2016-12-10
    • 2010-12-02
    • 2017-10-20
    • 2018-05-27
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多