【问题标题】:JSESSIONID missing when /xforms-server POST sent by orbeon client side ajax callerorbeon客户端ajax调用者发送/xforms-server POST时缺少JSESSIONID
【发布时间】:2021-09-10 23:46:37
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: orbeon


    【解决方案1】:

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

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

    注意Path=/demo。这是服务器告诉浏览器“除非它是/demo 下的请求,否则不要发送 cookie。你可以尝试清除 cookie,并检查标题的样子吗?它是否包含用于 Ajax 请求的路径?

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

    【讨论】:

    • 我想说的是,在浏览器调试中,除了 /xforms-server 调用外,我们到处都看到了转发的 JSESSIONID cookie,因此,当然,由于缺少 sessionid,我们得到了 403。我们正在尝试收集一些网络数据以进行共享。
    • 像往常一样,错误就在我们身边。我们已经实现了一个自定义的 tomcat authenticationvalve。成功登录后,我们让超类做它通常做的事情,但我们不知道超类不会创建新会话。我们通过 request.getSession() 调用意外创建了它(我们记录了会话中是否存在会话),当我们将其更改为不会创建新会话的 request.getSession(false) 时,就会发生上述情况。所以当我们把它改回来时,它又开始工作了。再次感谢您的帮助。
    • @m4gic 太好了,我很高兴你找到了问题所在。并感谢您的更新。 -亚历克斯
    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    • 2014-02-16
    • 2017-03-24
    相关资源
    最近更新 更多