Базовый способ работы SecurityUtils.getSubject()
Широ состоит в том, что он возвращает субъект, связанный с текущим выполняющимся потоком.Тем не менее, это просто противоречит контейнеру сервлетов, такому как Tomcat, который использует пул потоков для обслуживания запросов.
Если Tomcat говорит, что использует ThreadA для обработки запросов, любые вызовы SecurityUtils.getSubject()
должны работать нормально.Но как только ThreadB выбран, пользователь теряется, getSubject
возвращает ноль и isAuthenticated теперь ложно.Это даже если пользователь все еще вошел в систему.
Я подтвердил это в своем заявлении.Я использую Shiro Core 1.2 и замечаю, что мой пользователь просто чудесно не проходит проверку подлинности, когда я перемещаюсь по своему приложению.Если я просматриваю логи, проблема возникает, как только другой поток используется для обслуживания запроса.
Итак, я неправильно настроил Широ?Кажется, что «текущий пользователь» должен быть привязан к чему-то более долговечному, чем текущий поток.Я ожидал бы, что это будет основано на сессиях.Я знаю, что у Shiro есть управление сеансами, но во всех найденных примерах он говорит, что нужно получить текущего пользователя, вызвав getSubject
, который смотрит на ThreadContext.Я что-то упустил?