Session 会话
Session是一种状态保持机制,参考文章Session是什么可知Session和Web服务也没有必然关系,Shiro本身的Security Manager也可以脱离Servlet自己管理Session
根据Security Manager不同 Shiro本身有3种Session管理机制
Session Manager | 所需Security Manager | Session周期 |
---|---|---|
DefaultSessionManager | DefaultSecurityManager | 使用的默认实现,用于 JavaSE 环境; |
ServletContainerSessionManager | DefaultWebSecurityManager | 使用的默认实现,用于 Web 环境,其直接使用 Servlet 容器的会话 |
DefaultWebSessionManager | DefaultWebSecurityManager | 用于 Web 环境的实现,可以替代 ServletContainerSessionManager,自己维护着会话,直接废弃了 Servlet 容器的会话管理 |
可以配置在 securityManager 的 sessionManager 属性中
1 | <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> |
Cache 缓存
Cache的作用是把每次通过Realm查询到的结果存入Session,以便用户访问时加快Authentication和Authorization
如果要使用cache,必须在 securityManager 和 sessionManager 中同时进行配置
sessionManager的配置
在上文的例子中我们使用了最复杂的 org.apache.shiro.web.session.mgt.DefaultWebSessionManager 此处来讲解如何进行具体配置
准备工作
首先我们先对sessionManager里会用到的属性进行控制反转,加入Spring,至于为什么需要这些属性,参考文章Session是什么
1 | //shiro自带的EhCache缓存 |
注入sessionManager
在准备好了属性之后,对sessionManager进行注入
1 | <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> |
Shiro配置完毕
虽然讲解了自定义的DefaultWebSessionManager但是为了不产生额外的负担推荐使用ServletContainerSessionManager服务器容器自身的Session机制
因为在使用DefaultWebSessionManager产生过一些逻辑意外页面刷新就自动登出了Shiro
此时Shiro虽然已经配置完毕,按照道理应该可以正常使用,但是在实际过程中不会存放明文密码,所以请在阅读了Shiro完成加盐登陆后再进行实战