Несколько элементов режима отслеживания в одном элементе session-config в файле web.xml? - PullRequest
2 голосов
/ 09 июля 2019

Я использую Tomcat 8.0.35 для своего веб-приложения. Этот пост

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

говорит, что мы можем использовать несколько элементов режима отслеживания в одном элементе session-config в файле web.xml

<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>

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Tomcat 7 tracking-mode функция заменена Tomcat 6's disableURLRewriting

Context.disableURLRewriting: это было удалено. Эквивалентный эффект можно получить, настроив элементы session-config / tracking-mode в веб-приложении или в глобальном файле CATALINA_BASE / conf / web.xml.

Вы можете отключить JSESSIONID в URL

Стандарт Servlet 3.0 предоставляет два способа отключить перезапись сессии URL. Это работает в Tomcat 7, Glassfish v3 и любом другом сервлет-совместимом контейнере сервлетов 3.0

1 голос
/ 09 июля 2019

Ответ на вопрос можно найти в 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
  2. Если разрешено использовать отслеживание cookie - он ищет идентификатор сеанса в файлах cookie. Он имеет приоритет независимо от того, был ли в запросе идентификатор сеанса или нет.
  3. (Не часть вашего вопроса, но для полноты) Отслеживание сеанса SSL используется тогда и только тогда, когда это единственный разрешенный режим отслеживания. В противном случае оно будет проигнорировано.

Я не знаю, почему отслеживание URL не было извлечено в отдельном методе, как в режимах отслеживания SSL и Cookie, но они выглядят почти одинаково:

  1. Проверьте, включен ли режим
  2. Попробуйте найти SessionId
  3. Установить идентификатор сеанса в объекте запроса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...