【问题标题】:Java SessionID: How to get the Name of the GET SessionID Parameter?Java SessionID:如何获取 GET SessionID 参数的名称?
【发布时间】:2013-05-10 22:51:41
【问题描述】:

似乎 GET 请求中的 Parameter-Name 代表 SessionID(如 Tomcat 中的 jsessionid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX)在 servlet-spec 中没有标准化?如何获取 SessionID 的(Servelt Container Specific)名称? (至少在 Websphere 中似乎可以更改 SessionID-Parameter-Name 的名称)

=> 潜在的问题是,我需要在 servlet ALWYAS 中使用会话 ID 对 URL 进行编码。但似乎“response.encodeURL()”方法仅在禁用 Cookie 时才执行此操作(=>因此使用 URL 重写和 URL 中的 sessionID)。

在 servlet 中始终使用会话 ID 对 URL 进行编码的替代方法是什么?正如第一个问题所暗示的那样,我想自己构建 sessionid,但因此我需要 sessionID-Parameter Name 但是似乎没有标准化,所以我需要从某个地方获取 Parameter-Name ...)

更新: 目的是保留 Servlet-Container 提供的 SessionManagement 功能,而不是完全关闭它。我需要将回调 URL 传递给我希望始终包含 SessionURL 的第三方系统。所以我只想始终使用 sessionID 对这个 single URL 进行编码,以尽量减少任何安全问题...

非常感谢 一月

【问题讨论】:

    标签: java servlets jsessionid


    【解决方案1】:

    jsessionid 实际上不是请求参数,它被编码到 URL 本身,然后在到达控制器之前被容器解码和删除。 jsessionid本身的值可以从HttpSession.getId()获取。

    如果你想阻止 Tomcat 使用 cookie,那么你可以在 WEB-INF 下提供一个 tomcat 特定的 context.xml 文件,包含如下内容:

    <Context cookies="false" path="/path/to/my/webapp">
    </Context>
    

    这将禁用该 web 应用的所有 cookie,然后 tomcat 应自动将所有会话 ID 编码到 URL。

    【讨论】:

    • 您好 skaffman,感谢您的回答。您的答案提供了一些我不知道但不能解决问题的有趣信息。我想保留 Servlet-Container 提供的会话管理,但是“强制”容器对我将传递给第三方系统的特定 URL 进行编码。出于“安全原因”,我想让回调 URL 不依赖于 cookie,而是始终包含我在回调 URL 中设置的 sessionID。如上所述,因此我需要找到一种方法来始终使用会话 ID 对我的 URL 进行编码。谢谢一月。
    • Servlet API 无法强制容器执行此操作。您必须使用每个容器的专有机制。
    • 你好 skaffman,谢谢,我想做的似乎不太可能......
    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多