方法三:
若有sessionid,包装为sessionkey去查数据源获取session
2、在没有获取到session时,则获取sessionkey
跟踪源码要注意查看的是defaultwebsecumanager
第一个获取sessionid调用上面的defaultsecurmanager的方法
--------------------进入自定义的sessionmanager------------------------------------------
调用传递到子类的dogetsession
enable Session ValidationIf Necessary
启动会话验证
注意此处的,enableSessionValidationIfNecessary就是我们shiroconfig中开启的
2、自定义会话验证规则。加入sessionmanager
为空的话创建会话验证器
/设置session失效的扫描时间, 清理用户直接关闭浏览器造成的孤立会话 默认为 1个小时
在shiroconfig配置sessionmanager即可配置
//设置该属性 就不需要设置 ExecutorServiceSessionValidationScheduler 底层也是默认自动调用ExecutorServiceSessionValidationScheduler
该sessionkey是前面 webKey封装req、res、sessionid
到自定义的sessionmanager中的方法:
若是request里面,没有,默认从cookie中获取id
开启的获取到自定义的cookie
--------------以下实在SessionManager中个SimpleCookie----------
1、遍历request中的所有cookie,判断获取带有该命名的cookie
注意调用的是sessionDao中的readSession()
序列化SessionId,通过RedisManager获取该数据,反序列化获取Session
Session s = (Session)SerializeUtils.deserialize(redisManager.get(this.getByteKey(sessionId)));
String preKey = this.keyPrefix + sessionId;
获取到的session放入webcontext