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 重写的主要内容,如果未能解决你的问题,请参考以下文章

Embedded Jetty 无法识别 Spring MVC 安全性

Spring 3.1 WebApplicationInitializer & Embedded Jetty 8 AnnotationConfiguration

Embedded Jetty HTTP/2 不适用于 Firefox/Chrome,但在 Safari 上似乎没问题

Embedded Jetty:在安全的 https 服务器中,ContextHandler 重定向到 http URI

Spring Boot 使用Jar打包发布, 并使用 Embedded Jetty/Tomcat 容器

Windows 7 Embedded - 以编程方式禁用磁盘缓存: