Вы можете оставить свой web.xml
как есть, поскольку Широ не имеет ничего общего с конфигурацией в этом файле. Существует разница в HttpSession
, используемом HttpServletRequest
вашего сервлета и Shiro Session
. Это совершенно разные вещи. Так что не смущайтесь конфигурацией сеанса сервлетом и Сиро. В этом случае мы разрешим Широ обработать вашу сессию.
Проблемы с вашим shiro.ini
Вы переопределяете параметры, которые пишете в DefaultWebSessionManager
:
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager // Define a sessionManager variable
securityManager.sessionMode=native
securityManager.sessionManager.globalSessionTimeout = 60000 // set a securityManager.sessionManager property
securityManager.sessionManager = $sessionManager // override the property by setting the object
Сначала вы должны установить объект:
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
securityManager.sessionMode=native
securityManager.sessionManager.globalSessionTimeout = 60000
Вам не нужен ExecutorServiceSessionValidationScheduler
, так как valdiator уже предоставлен 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
securityManager = org.apache.shiro.web.mgt.DefaultWebSecurityManager
securityManager.sessionManager = $sessionManager
DefaultWebSessionManager
DefaultWebSessionManager предоставляет все функции, которые вы ищете из коробки (в основном). Когда сеанс истекает, DefaultWebSessionManager
вызывает onExpiration
на своем super , который уведомляет всех своих слушателей об истечении срока действия SessionManager . Вы можете просто зарегистрировать SessionListener в своем SessionManager
и запустить перезагрузку или перенаправление по его onExpiration
методу. Может быть, этот подход достаточно подходит для приложений jsp / jspx.
В любом случае, прочитайте, как зарегистрировать слушатель сеанса здесь в официальных документах.
Альтернативный подход
Другой подход может заключаться в том, чтобы ваш клиент управлял состоянием сеанса и позволял ему постоянно проверять срок действия, вызывая вашу службу. Это может быть сделано таймером или циклом в JavaScript.
Примечание
org.apache.shiro.authc.credential.Sha256CredentialsMatcher
устарело с 2010 года.
Используйте HashedCredentialsMatcher напрямую и установите его свойство hashAlgorithmName.