5Shiro五(Session)

Shiro—Session

一.获取Session

Session通过与当前Subject获得:

Subject currentUser = SecurityUtils.getSubject();
Session session = currentUser.getSession();
session.setAttribute("someKey", someValue);

Subject.getSession(boolean create)方法的功能与HttpServletRequest.getSession(boolean create)非常相似。

二. SessionManager

SessionManager负责管理应用程序中所有Subject的Session,如:创建,删除,验证等。与Shiro中的其他核心架构组件一样,SessionManager由该顶级组件SecurityManager维护。默认ecurityManager实现默认使用DefaultSessionManager开箱即用。DefaultSessionManager提供了应用程序所需的所有企业级会话管理功能,如会话验证,清理等。默认情况下,SessionManager默认为30分钟的超时。

三. EHCache SessionDAO

EHCach不是默认启用的,如果没有实现自己的SessionDAO,则可使用SessionManagement支持的EHCache。如果内存受限制,EHCache SessionDAO将在内存中存储会话并支持溢出到磁盘。EHCache配置如下:

<cache name="shiro-activeSessionCache"
       maxElementsInMemory="10000"
       overflowToDisk="true"
       eternal="true"
       timeToLiveSeconds="0"
       timeToIdleSeconds="0"
       diskPersistent="true"
       diskExpiryThreadIntervalSeconds="600"
/>

四. Session验证和调度

在应用中必须验证Session,以便可以从Session数据存储中删除任何无效(已过期或已停止)的Session。这可确保数据存储不会随着时间的推移而填满永远不会再次使用的Session。出于性能原因,Sessions仅验证它们在访问时是否已停止或过期(即subject.getSession())。这意味着如果没有额外的定期验证,Session就会开始填满数据存储。常见示例是Web浏览器场景:假设用户登录到Web应用程序并创建会话以保留数据(身份验证状态,购物车等)。如果用户在应用程序不知情的情况下没有注销并关闭浏览器,则他们的会话基本上只是在会话数据存储中孤立。在SessionManager没有检测到用户不再使用其浏览器的方式,会话决不会再次访问,如果没有定期清除这些失效的Session,将填满会话数据存储,因此,SessionManager支持SessionValidationScheduler。SessionValidationScheduler负责定期验证会话,以确保在必要时对其进行清理。

sessionValidationScheduler = org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler
sessionValidationScheduler.interval = 3600000

securityManager.sessionManager.sessionValidationScheduler = $sessionValidationScheduler

定期会话验证的目的主要是删除无效Session,以确保它们不会填满会话数据存储。默认情况下,每当Shiro检测到无效会话时,它都会尝试通过该SessionDAO.delete(session)方法将其从基础会话数据存储中删除。对于大多数应用程序来说,这是一种很好的做法,可确保会话数据存储空间不会耗尽。但是,某些应用程序可能不希望Shiro自动删除会话。在shiro.ini:

securityManager.sessionManager.deleteInvalidSessions = false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值