根据 Java EE 标准,Tomcat 允许请求以两种方式指定其现有会话 ID:1)通过 cookie;2)通过“路径参数”(不是常规参数;路径参数具有格式http://host/path/file.ext;jsessionid=xxx?a=b&c=d...
- 请注意“;”以及查询字符串仅在路径参数之后开始的事实)。我想要的是在“?”之后的查询字符串中将请求中的会话 ID 作为常规参数传递,例如http://host/path/file.ext?jsessionid=xxx
.
当请求到达我可以拦截它并改变容器确定会话 ID 的方式(例如在过滤器或 Servlet 中)时,为时已晚。我想改变的行为是在初始处理来自客户端的请求。出于所有显而易见的原因,我想避免做的是更改 Coyote 或 Tomcat 代码并自己重建 Tomcat。我更愿意做的是覆盖适当的代码并配置 Tomcat 以使用该代码来确定请求的会话 ID。这似乎不可能,但我希望我错了。
我知道以这种方式获取会话 ID 是不标准的;我知道使用 cookie 或路径参数都是跟踪会话状态的好方法;我知道将会话 ID 放在实际的查询字符串中会带来潜在的问题。无论如何我都需要这样做。
运行Tomcat 7,顺便说一句。