Apache Shiro isAuthenticated возвращает true после перезапуска Tomcat - PullRequest
0 голосов
/ 10 мая 2018

У меня есть веб-приложение, развернутое с Tomcat (8.0.32), и операции входа в систему / выхода из системы работают нормально при каждом повторном развертывании. Однако они не работают так хорошо, если я остановлю Catalina без повторного развертывания веб-приложения (./catalina.sh stop, а затем ./catalina.sh start без каких-либо изменений в содержимом папки веб-приложения). Происходит следующее: метод org.apache.shiro.subject.Subject.isAuthenticated() возвращает true сразу после запуска сервера , но перед началом новой операции входа в систему .

Более конкретно, моя реализация javax.servlet.Filter.doFilter начинается со следующей строки:

if(org.apache.shiro.SecurityUtils.getSubject().isAuthenticated()) ...

, который возвращает истину сразу после перезапуска сервера, но перед новым входом в систему. Версия Широ 1.3.0.

Поэтому мне было интересно, если я что-то упустил, например, Есть ли какие-либо операции, которые должны быть выполнены раньше, или это неправильный способ использовать этот метод? Спасибо за внимание.

1 Ответ

0 голосов
/ 12 мая 2018

Я не уверен, как выглядит ваша конфигурация Shiro, но в зависимости от вашей реализации Shiro по умолчанию устанавливает cookie, который все еще может быть действительным после перезапуска вашего сервера.

В зависимости от вашей реализации SessionManager вы можете установить globalSessionTimeout и sessionValidationInterval. Время ожидания сеанса по умолчанию установлено на 1800000L (30 минут). См. AbstractSessionManager и DefaultWebSessionManager . Пример реализации:

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
# Session timeout token_ttl_ms = 14 days
sessionManager.globalSessionTimeout = 1209600000
# Session valdiation = 15 minutes
sessionManager.sessionValidationInterval = 900000

Если вы не хотите использовать какой-либо файл cookie, вы можете отключить его, установив следующее свойство в конфигурации SecurityManager и полностью пропустив управление сеансом с помощью SessionManager:

securityManager.sessionManager.sessionIdCookieEnabled = false 
...