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