如果不接受 cookie,配置 WildFly/Undertow 以将 JSESSIONID 放在 URL 上

Posted

技术标签:

【中文标题】如果不接受 cookie,配置 WildFly/Undertow 以将 JSESSIONID 放在 URL 上【英文标题】:Configure WildFly/Undertow to put JSESSIONID on URL if cookies not accepted 【发布时间】:2015-02-14 12:50:43 【问题描述】:

我们之前使用 JBoss 7.1.2 并利用 JSESSIONID 放在 URL 上的行为作为不接受 cookie 或请求中不存在 JSESSIONID cookie 时的后备。

迁移到 WildFly 8.2.0 / Undertow 1.1.0 后,此 URL 重写不会发生。

是否可以配置 WildFly/Undertow 以将 JSESSIONID 放在 URL 上作为后备?我们知道将 session-config 放入 web.xml 的可能性,例如:

<session-config>
  <tracking-mode>URL</tracking-mode>
</session-config>

但我们只希望 URL 上的 JSESSIONID 作为后备解决方案。

【问题讨论】:

【参考方案1】:

要使用基于 cookie 的会话跟踪(如果可用)和基于 URL 的会话跟踪作为备用,您应该像这样配置您的部署描述符 web.xml

<web-app ...>
  <session-config>
    <tracking-mode>COOKIE</tracking-mode>
    <tracking-mode>URL</tracking-mode>
  </session-config>
</web-app>

请注意,您至少需要 servlet 3.0 规范!

不幸的是,Wildfly/Undertow 中有一个 bug (UNDERTOW-396) 阻止使用回退。对于 Undertow 1.2.0-Beta10,该错误已被标记为已修复,但 Wildfly 8.1.0.Final 和 8.2.Final 都使用旧版本。因此,目前您可能需要在 Wildfly 安装中更新 Undertow 才能获得修复。

这是另一个有用的blog-post 关于这个主题。

更新:Wildfly 9.0.2.Final 使用 Undertow 1.2.9,所以这应该可以再次工作(尚未测试)。

【讨论】:

请注意,将 sessionid 放在 URL 中存在一些安全问题。查看 OWASP 前 10 名的建议。查看主题 A2 和会话固定。

以上是关于如果不接受 cookie,配置 WildFly/Undertow 以将 JSESSIONID 放在 URL 上的主要内容,如果未能解决你的问题,请参考以下文章

MVC3 不接受 cookie

在 Java 中使用 Selenium 接受 cookie

Webview 不能接受 cookie

接受并记录外国 Cookie

在python中接受cookie后抓取网页

在 WebClient 中接受 Cookie?