shiro源码篇 - shiro的session的查询、刷新、过期与删除,你值得拥有

  开心一刻  

    老公酷爱网络游戏,老婆无奈,只得告诫他:你玩就玩了,但是千万不可以在游戏里找老婆,不然,哼哼。。。
    老公嘴角露出了微笑:放心吧亲爱的,我绝对不会在游戏里找老婆的!因为我有老公!
    老婆:......

  路漫漫其修远兮,吾将上下而求索!

  github:https://github.com/youzhibing

  码云(gitee):https://gitee.com/youzhibing

前情回顾

  大家还记得上篇博文讲了什么吗,我们来一起简单回顾下:

    SecurityManager是shiro的核心,负责与shiro的其他组件进行交互;SessionManager是session的真正管理者,负责shiro的session管理;

    SessionsSecurityManager的start方法中将session的创建委托给了具体的sessionManager,是创建session的关键入口。

    SimpleSession是shiro完完全全的自己实现,是shiro对session的一种拓展;实现了ValidatingSession接口,具有自我校验的功能;一般不对外暴露,暴露的往往是他的代理:DelegatingSession;SimpleSession有几个属性值得重点关注下,如下

        id:就是session id;

        startTimestamp:session的创建时间;

        stopTimestamp:session的失效时间;

        lastAccessTime:session的最近一次访问时间,初始值是startTimestamp

        timeout:session的有效时长,默认30分钟

        expired:session是否到期

        attributes:session的属性容器

查询

  session的创建完成后,会将session(SimpleSession类型)对象的代理对象(DelegatingSession)装饰成StoppingAwareProxiedSession对象,然后绑定到subject(类型是DelegatingSubject);

  Session session = subject.getSession();返回的就是绑定在当前subjuct的session。注意subject的实际类型是:DelegatingSubject,如下图

shiro源码篇 - shiro的session的查询、刷新、过期与删除,你值得拥有

刷新

  shiro的Session接口提供了一个touch方法,负责session的刷新;session的代理对象最终会调用SimpleSession的touch():

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppdpz.html