第十二节 Shiro会话管理

一、Shiro Session 的基本功能

        在Shiro里面可以发现所有的用户的会话信息都会由Shiro来进行控制,那么也就是说只要是与用户有关的一切的处理信息操作都可以通过Shiro取得,实际上Shiro的会话能够获取到HttpSession中存储的值,这所有的信息都可以通过Subject接口取得。

        在Controller层,我们建议大家使用原生的HttpSession。那么Shiro的Session有什么意义呢?

        一般来说,Controller层使用原生的HttpSession对象,在Service层中使用Shiro提供的Session对象。如果在Service层中使用HttpSession对象,那么属于侵入式,并不建议这么做。Shiro提供的Session能够很好的解决这个问题。

        Shiro的核心API如下:

        Subject.getSession()  获取Shiro的session

        session.setAttribute(key,val) & session.getAttribute(key) & session.removeAttribute(key)

        session.getId()            获取会话ID

        session.getTimeout() & session.setTimeout(毫秒)  设置/获取当前Session的过期时间。

        session.getStartTimestamp() & session.getLastAccessTime()    获取会话的启动时间及最后访问时间

        session.stop()            Subject.logout()会自动调用session.stop()。

二、简单集成

        如果要进行session管理,一定要定期释放空间,所以这个时候一定需要定时组件才可以完成。

       一般使用的就是定时任务组件Quartz,Shiro已经给我们配置好了。

    
      org.apache.shiro
      shiro-quartz
      1.4.0
    

        关于如何在shiro中配置SessionManager,像下面一样配置即可。 

        globalSessionTimeout:全局 session 过期时间,单位是 毫秒

        sessionValidationScheduler:定时任务,用于扫描会话

        sessionDao: 主要实现 session 的增删改查

        sessionIdCookie :sessionManager需要使用会话cookie模版



    ...
    
    




    
    
    
    
    
    
    
    
    
    
    
    
    
    
    




    
    
    







    
    

三、Shiro会话获取HttpSession中储存的值

        首先启动项目后,来到项目的首页。

第十二节 Shiro会话管理_第1张图片

        点击第一个超链接"测试超链接",发送访问项目数据库的请求。因为用户没有登录,所以被强制重定向到了登录页面。

       在登录页面输入 jay /123456 后,点击提交,发送表单请求。在处理此请求的Controller层里面,我把一个值存放到了HttpSession里面。

        第十二节 Shiro会话管理_第2张图片

        设置一组键值对  "abc"--"def"到HttpSession中。

        此请求执行完毕后,返回到登录成功页面。

      第十二节 Shiro会话管理_第3张图片

         再点击"进入管理员页面"超链接,返送相关请求。后台处理此请求的Controller里面,使用Shiro获取到Shiro的会话Session,尝试获取到Key为"abc"的键值对的值。在控制台打印出"def",说明Shiro提供的会话session能够正确的从HttpSession中获取键值对。同时也证明本次集成Shiro会话成功。

第十二节 Shiro会话管理_第4张图片

四、源码下载

       本章节项目源码:点击我下载源码

----------------------------------------------------分割线------------------------------------------------------- 

       下一篇:第十三节 Shiro集成Redis实现分布式Session共享

       阅读更多:跟着大宇学Shiro目录贴

你可能感兴趣的:(跟着大宇学Shiro)