Embedded Jetty - 禁用外部 URL 的 URL 重写

Posted

技术标签:

【中文标题】Embedded Jetty - 禁用外部 URL 的 URL 重写【英文标题】:Embedded Jetty - Disable URL rewriting for external URLs 【发布时间】:2018-05-12 00:05:03 【问题描述】:

我在嵌入式服务器配置中使用 Jetty。当客户端不接受 cookie 时,Jetty 使用 URL 重写来对 URL 本身中的会话 ID 进行编码(在 URL 中添加类似 ;jsessionid=xxx 的内容)。

我的问题是,当我将客户端(使用 HTTP 302,临时移动)重定向到外部 URL 时,此 URL 重写会破坏我重定向到的外部 URL(即 ;jsessionid=xxx 是也出现在 URL 中)。

如何在嵌入式 Jetty 上选择性地禁用外部 URL 的 URL 重写?这是Jetty的错误吗?我正在使用码头 9.4.7。我也尝试设置选项org.eclipse.jetty.servlet.SessionDomain,但无济于事。

【问题讨论】:

【参考方案1】:

我终于通过深入研究 Jetty 代码路径找到了答案。您只需要启用以下初始化选项:

org.eclipse.jetty.servlet.CheckingRemoteSessionIdEncoding=true

以嵌入式 Jetty 为例:

ServletContextHandler context = ...
context.setInitParameter(
    "org.eclipse.jetty.servlet.CheckingRemoteSessionIdEncoding",
    "true");

感兴趣的读者请注意:与此相关的代码在 org.eclipse.jetty.server.Response::encodeURL()(v9.4.7 的第 477 行)中。

【讨论】:

以上是关于Embedded Jetty - 禁用外部 URL 的 URL 重写的主要内容,如果未能解决你的问题,请参考以下文章