【问题标题】:Multiple tracking-mode elements within a single session-config element in the web.xml?web.xml 中单个会话配置元素中的多个跟踪模式元素?
【发布时间】:2019-07-09 04:04:42
【问题描述】:

我正在为我的 Web 应用程序使用 Tomcat 8.0.35。本帖

https://www.logicbig.com/tutorials/java-ee-tutorial/java-servlet/session-tracking-mode.html

表示我们可以在 web.xml 中的单个 session-config 元素中使用多个 tracking-mode 元素

<web-app>
    <session-config>
        <tracking-mode>???</tracking-mode>
    </session-config>
 </web-app>

我无法找到有关“多个跟踪模式元素”的附加信息。如果我有以下情况,Tomcat 的行为可能是什么?

<web-app>
    <session-config>
        <tracking-mode>URL</tracking-mode>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>
 </web-app>

【问题讨论】:

    标签: tomcat servlets


    【解决方案1】:

    问题的答案可以在org.apache.catalina.connector.CoyoteAdapter#postParseRequest找到

    以下代码来自tomcat 8.5:

                String sessionID;
                if (request.getServletContext().getEffectiveSessionTrackingModes()
                        .contains(SessionTrackingMode.URL)) {
    
                    // Get the session ID if there was one
                    sessionID = request.getPathParameter(
                            SessionConfig.getSessionUriParamName(
                                    request.getContext()));
                    if (sessionID != null) {
                        request.setRequestedSessionId(sessionID);
                        request.setRequestedSessionURL(true);
                    }
                }
    
                // Look for session ID in cookies and SSL session
                parseSessionCookiesId(request);
                parseSessionSslId(request);
    
                sessionID = request.getRequestedSessionId();
    

    会发生以下情况:

    1. 如果允许 tomcat 使用 URL 会话跟踪,它会尝试在 URL 请求中查找 sessionId
    2. 如果允许使用 cookie 跟踪 - 它会在 cookie 中查找会话 ID。无论请求中是否有会话 ID,它都具有优先权。
    3. (不是您的问题的一部分,而是为了完整性)当且仅当它是唯一允许的跟踪模式时才使用 SSL 会话跟踪。否则会被忽略。

    我不知道为什么没有像 SSL 和 Cookie 跟踪模式那样以单独的方法提取 URL 跟踪,但它们看起来几乎相同:

    1. 检查模式是否启用
    2. 尝试查找SessionId
    3. 在请求对象中设置会话 ID。

    【讨论】:

      【解决方案2】:

      Tomcat 7 的 tracking-mode 功能替换了 tomcat 6's disableURLRewriting

      Context.disableURLRewriting:这已被删除。通过在 Web 应用程序或全局 CATALINA_BASE/conf/web.xml 文件中配置 session-config/tracking-mode 元素可以获得等效效果。

      你可以Disable JSESSIONID in URL

      Servlet 3.0 标准为您提供了两种禁用 URL 会话重写的方法。这适用于 Tomcat 7、Glassfish v3 和任何其他符合 Servlet 3.0 的 servlet 容器

      【讨论】:

      • 跟踪模式是 servlet 规范的一部分,因此它适用于所有 servlet 容器,包括 tomcat 8
      • @SvetlinZarev 我删除了报价
      猜你喜欢
      • 2012-10-03
      • 1970-01-01
      • 2020-09-24
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多