Tomcat создает новый поток для той же сессии - PullRequest
1 голос
/ 20 декабря 2011

У меня есть веб-приложение, которое использует Stripes и библиотеку Apache Shiro для безопасности.

В моей локальной установке Windows Tomcat 6.0.33 все работает нормально.Однако, когда я запускаю приложение на Tomcat 6.0.16 в Linux на моем хосте DailyRazor, я вижу, что Tomcat периодически создает новый поток для одного и того же пользователя / сеанса, и поэтому пользователь теряет свои учетные данные и его просят войти в систему.снова.

Я также заметил это на своем устройстве для разработки при работе под Jetty.

Я не думаю, что это проблема тайм-аута неактивности, поскольку обращения, которые я даю в веб-приложение, являются последовательными,что-то в конфигурации Tomcat, которое может отличаться, кроме разных второстепенных версий?

В качестве альтернативы, есть ли простой способ отладки информации о сеансе (поскольку она не отображается в моих URL)?

1 Ответ

3 голосов
/ 20 декабря 2011

Просто чтобы было понятнее, чем если бы это было в комментарии: каждый HTTP-запрос будет обрабатываться произвольным потоком.Tomcat (и другие серверы приложений) используют пул потоков, выбирают поток из пула, выполняют запрос и возвращают поток в пул.

Сессия HTTP полностью ортогональна потоку: несколькозапросы из одного сеанса могут обрабатываться разными потоками.Поток выполняет запросы из нескольких сессий.Параллельных сессий обычно гораздо больше, чем потоков в пуле.И, наконец, у вас могут быть два потока, выполняющих два запроса на один и тот же сеанс.Это подразумевает, что объекты, хранящиеся в сеансе, должны быть поточно-ориентированными, или что для доступа к небезопасным объектам, хранящимся в сеансе, должен использоваться механизм синхронизации.

Кроме того, несколько кадров или вкладокданный браузер использует тот же сеанс HTTP.У вас будет другой сеанс, если вы запустите другой браузер (например, Chrome в дополнение к Firefox) или если вы используете браузер на другом компьютере.

...