继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

慕哥9229398
关注TA
已关注
手记 1099
粉丝 198
获赞 911

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,如下图

webp

回到顶部

刷新

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

public void touch() {

this.lastAccessTime = new Date(); // 更新最后被访问时间为当前时间

}

但是touch方法是什么时候被调用的呢?JavaSE需要我们自己定期的调用session的touch() 去更新最后访问时间;如果是Web应用,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间,ShiroFilter的类图如下:

webp



作者:java菜
链接:https://www.jianshu.com/p/54762fef5d58


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP