orbeon 客户端 ajax 调用者发送 /xforms-server POST 时缺少 JSESSIONID

问题描述

我们正在处理 orbeon 会话管理:

我们有一个自定义身份验证机制,可以在服务器(本地)上正常工作,但是当我们尝试远程使用 orbeon 时,我们在登录后每次 /xforms-server 调用时都会收到 403。

我们的自定义身份验证发生在 tomcat/容器级别,结果是出现在登录请求响应中的标准 JSESSIONID cookie。

“有趣”的是这个 JSESSIONID 出现在除了这些之外的每个“正常”浏览器请求(资源)中,所以那些试图访问 /xforms-server 的人

好像客户端 javascript 不会为 xhr 请求设置这个 JSESSIONID cookie。

  • 我们已经设置了 cookie 转发here
  • 我们已经设置了描述的 cookie 路径 here

我们已经提高了 log4j 级别和 orbeon 调试,但我们只得到了我们已经知道的相同信息,即 sessionId cookie 没有转发到服务器。

你知道我们还能做什么吗?

解决方法

您是说浏览器不会为 Ajax 请求发送 JSESSIONID cookie。 cookie 不是由 JavaScript 设置的。它由服务器使用 Set-Cookie 标头设置。例如,在 /démo 上部署 Orbeon Forms,如果您清除 cookie,则在您第一次向服务器发出请求时,您将在响应中看到:

Set-Cookie: JSESSIONID=FAD4923E960D0C0341BC750265222FB6; Path=/demo; Secure; HttpOnly

注意 Path=/demo。这是服务器告诉浏览器“除非它是 /demo 下的请求,否则不要发送 cookie。您能否尝试清除 cookie,并检查标头的外观?它是否包含用于 Ajax 的路径请求?

这可能不用说,但我还是要说;),除了路径之外,您还需要确保 Ajax 请求转到加载页面的同一服务器,否则您没有任何更改浏览器将发送 cookie。