似乎GET请求中的参数名称,表示SessionID(如Tomcat中的jsessionid = XXXXXXXXXXXXXXXXXXXXXXXXXXX)在servlet规范中未标准化?如何获取SessionID的(Servelt Container Specific)名称? (至少在Websphere中似乎有可能更改SessionID-Parameter-Name的名称)
=>底层问题是,我需要使用会话ID在servlet ALWYAS中编码URL。但似乎“response.encodeURL()”方法仅在禁用Cookie时执行此操作(=>因此使用URL中的sessionID重写URL)。
在servlet中始终使用会话ID编码URL的替代方法是什么?由于第一个问题意味着我想自己构建sessionid但是因此我需要sessionID-Parameter Name,但是它似乎不是标准化的,所以我不知何故需要从某个地方获取Parameter-Name ...)
更新: 目的是保持Servlet-Container提供的SessionManagement功能,而不是完全关闭它。我需要将回调URL传递给我想要始终包含SessionURL的第三方系统。因此,我只想使用sessionID对此单 URL进行编码,以最大限度地减少安全问题......
非常感谢你 扬
答案 0 :(得分:3)
jsessionid
实际上不是一个请求参数,它被编码到URL本身,然后在它到达控制器之前由容器解码和删除。可以从HttpSession.getId()
检索jsessionid本身的值。
如果您想阻止Tomcat使用cookie,那么您可以在context.xml
下提供一个特定于tomcat的WEB-INF
文件,其中包含以下内容:
<Context cookies="false" path="/path/to/my/webapp">
</Context>
这将禁用该webapp的所有cookie,然后tomcat应自动将所有会话ID编码到URL上。