【问题标题】:Embedded Jetty - Disable URL rewriting for external URLsEmbedded Jetty - 禁用外部 URL 的 URL 重写
【发布时间】: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,但无济于事。
【问题讨论】:
标签:
url-rewriting
jetty
embedded-jetty
http-redirect
jsessionid
【解决方案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 行)中。