博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shiro的校验Session是否过期处理的过程
阅读量:5159 次
发布时间:2019-06-13

本文共 2512 字,大约阅读时间需要 8 分钟。

首先开启定时扫描活跃的session进行校验

然后看源代码

AbstractValidatingSessionManager类中的validateSessions()

public void validateSessions() {        if (log.isInfoEnabled()) {            log.info("Validating all active sessions...");        }        int invalidCount = 0;        Collection
activeSessions = getActiveSessions(); if (activeSessions != null && !activeSessions.isEmpty()) { for (Session s : activeSessions) { try { //simulate a lookup key to satisfy the method signature. //this could probably stand to be cleaned up in future versions: SessionKey key = new DefaultSessionKey(s.getId()); validate(s, key); } catch (InvalidSessionException e) { if (log.isDebugEnabled()) { boolean expired = (e instanceof ExpiredSessionException); String msg = "Invalidated session with id [" + s.getId() + "]" + (expired ? " (expired)" : " (stopped)"); log.debug(msg); } invalidCount++; } } } if (log.isInfoEnabled()) { String msg = "Finished session validation."; if (invalidCount > 0) { msg += " [" + invalidCount + "] sessions were stopped."; } else { msg += " No sessions were stopped."; } log.info(msg); } }

做校验的方法是validate(s, key);

protected void validate(Session session, SessionKey key) throws InvalidSessionException {        try {            doValidate(session);        } catch (ExpiredSessionException ese) {            onExpiration(session, ese, key);            throw ese;        } catch (InvalidSessionException ise) {            onInvalidation(session, ise, key);            throw ise;        }    }

validate(session, key)说明:

AbstractValidatingSessionManager.validate(Session session, SessionKey key)方法中,如果是session有效期过期了,这会调用onExpiration(Session s, ExpiredSessionException ese, SessionKey key)方法,该方法中onExpiration(s)调用ShiroCache类,删除shiro_redis_session:shiro-activeSessionCache:的session信息;afterExpired(s)调用RedisSessionDAO类,删除shiro_redis_session:的session信息

转载于:https://www.cnblogs.com/onlymate/p/9060533.html

你可能感兴趣的文章
MySQL之锁、事务、优化、OLAP、OLTP
查看>>
MySQL之创建用户和授权
查看>>
学生选课系统
查看>>
高大上版解决粘包问题
查看>>
什么是粘包,如何解决?
查看>>
开启进程 守护进程
查看>>
操作系统 串行 并发 并行 阻塞 非阻塞
查看>>
互斥锁 僵尸进程与孤儿进程
查看>>
数据库设计(第一范式,第二范式,第三范式
查看>>
线程的理论
查看>>
前端 HTML
查看>>
前端之BOM和DOM
查看>>
前端之JS
查看>>
前端之BootStrap
查看>>
前端之jQuery
查看>>
HTML 前端
查看>>
pycharm 导入 新安装 moudle
查看>>
ES使用text类型字段排序报错
查看>>
Core源码(二) Linq的Distinct扩展
查看>>
Core源码(三) Lazy<T>
查看>>