0

IWS 是一个桌面应用程序,具有自己的 webBrowser 组件,可在需要时调用 Scripting web-app。脚本位于Tomcat6中。

脚本基本上是一个 JSP 应用程序。(实际上,它是一个引擎,它通过图形界面上的人工操作构建 JSP 应用程序,例如定义流程、按钮、内容等,但我说的是它作为 JSP 生成的“脚本”)

我需要破解脚本,以便它可以在 IWS 应用程序的 webBrowser 组件中共享空间(通过框架)。

IWS 调用 2 次 start.jsp:

  • 第一次,以隐藏方式(可能是来自 IWS 代码的直接 http 查询),没有任何特殊参数。原始 start.jsp 执行 2 302 次(因此调用总共访问 3 个页面)它在 cookie 和参数中都使用 jsesionId 结束(但不是在最后的 302 处)

  • 第二次,使用 jSessionId 和一堆重要参数。它只使用 jSessionId 作为参数。据我在提琴手中看到的,当它正常工作时没有使用 cookie,因为 jsessionId 在它自己的内部

所以我猜第一次只是为了得到一个新的jSessionId。

我现在尝试的解决方案是用一个新的框架页面替换脚本起始页面,在它拥有的两个框架之一中,它加载 Web 应用程序,并在第二个框架中加载另一个应用程序。根据第一帧的数据,它将更新第二帧。

所以像:

  • 我们有 start.jsp...(实际上它被称为不同的东西)

  • 我们以:

    • start.app.jsp(原来的 start.jsp,只是改名了)

    • start.jsp(是新的包含 html 的包装了之前的 start.jsp)

新的 start.jsp 使用自己的 url,将 start.jsp 更改为 start.app.jsp,在 iframe 中调用真正的脚本应用程序。

但是我一直在遭受类似的会话问题。我不是tomcat的专家。我了解到它使用 cookie 或参数控制会话。我认为它被配置为与 URL sessionId 一起使用,但我不太确定。我已将 META-INF/settings.xml 设置为禁用会话中的 cookie 使用,但它仍会在 cookie 列表中显示 cookie。

我的问题是,在第二次调用 start.jsp 时,它看起来比某些人认为的“旧 cookie”正在被使用,而忽略了 URL 中的 jsessionId。WWG00000E 出现一些奇怪的错误:WWGAIL - 错误:未为函数 getInteractionKVPair 提供 ID 详细信息:

这就像它正在返回一个带有另一个 jsessionid 的旧 cookie。每次出现错误时,那个“旧”jsessionid 都是相同的。

用 fiddler 嗅探,我看到第二个 start.jsp 以 URL 中的正确 jsessionId 开头,但它的 cookie 就像来自另一个会话,并且由于发生这种情况,它停止在每次重定向时添加 jsession id。就好像它在一个完全不同的宇宙中执行。这正常吗??????

目前,我试图强制cookie jSessionId 以及链接以使它们包含jSessionId,但无济于事。

请问,你有什么想法吗?

谢谢!

Edited2:如果我放置它没有框架(恢复默认 start.jsp)。在 IWS 仅在第一次工作(交互),而在任何后续的问题开始出现......

4

1 回答 1

1

好的,终于解决了……

至少对于这个版本的 Tomcat:

  • 对没有 jSessionId 的 jsp 的调用会在您的应用程序 cookie 中创建一个新的 jSessionId。
  • 任何进一步的及时 html 请求都将使用 cookie jSessionId 而不是 URL 上的那个,因此您将失去任何类型的多会话支持。

它比在 webBrowser 组件中的特殊之处,进行两步连接,第一个请求永远不会有关联的 cookie,所以它工作正常,给你一个带有新 jSessionId 的 cookie,然后你可以做一个新的,无 cookie,第二个使用 URL 的 jSessionId 并且没有 cookie 或具有没有 jSessionId 的“默认”cookie 的请求。当这个 webBrowser 请求一个在其 URL 中没有 jSessionId 的 jsp 页面时,问题就开始了,所以如果第一个请求包含一个非 jSessionIded 调用,Tomcat 会给你一个 jSessionId,它是在你的“默认应用程序 cookie”上设置的,所以第二个请求忽略任何 URL jSessionId 以使用该 cookie 上的那个。

在网络浏览器中,我观察到至少在 Firefox 中,清理 cookie 不足以消除这个“默认 cookie”。但也许它可能是经典的“它需要太长时间,所以你认为它很干净,但实际上它不是”。没有把握。

我知道这听起来令人困惑。我没有时间对此做进一步的测试。

据我了解,就像,当它工作正常时,它就像使用“会话 cookie”(没有 jSessionId)一样工作,而当它不工作时,它使用“默认 cookie”(使用 jSessionId)并启动忽略 URL jSessionId。

我已向 Tomcat 的开发邮件列表发送了一封电子邮件。(有人说正确的地方是用户邮件列表......但你在这里;-))

于 2017-06-13T15:23:22.663 回答