CreateSubject-------方法三resolveSession详解(重要)

方法三:

功能:

1、查询有没session

更新session

2、查看sessionid

通过cookie存有session对应的id

通过遍历所有cookie查询自定义的cookie

3、获取默认的

resolveSession详解

内部有两个session方法

1、if中判断方法:

通过如下的id类型从容器获取session

通过如下的id类型从容器获取sessionid

若有sessionid,包装为sessionkey去查数据源获取session

然后再想通过如下的id获取subject也没有

注意这几个方法靠近创建更新session保存到redis中

2、在没有获取到session时,则获取sessionkey

即sessionid

同样容器里面也没有:

这个是defaultsecuritymanager的

 

跟踪源码要注意查看的是defaultwebsecumanager

判断是否为web容器

第一个获取sessionid调用上面的defaultsecurmanager的方法

-

-

最终打包成WebsessionKey

返回key满足条件

调用securitymanage中的getSession

 

--------------------进入自定义的sessionmanager------------------------------------------

 

调用传递到子类的dogetsession

enable Session ValidationIf Necessary

启动会话验证

注意此处的,enableSessionValidationIfNecessary就是我们shiroconfig中开启的

临时扩展:

1、开启true

2、自定义会话验证规则。加入sessionmanager

获取会话验证器

为空的话创建会话验证器

传入sessionmanager

/设置session失效的扫描时间, 清理用户直接关闭浏览器造成的孤立会话 默认为 1个小时

在shiroconfig配置sessionmanager即可配置

//设置该属性 就不需要设置 ExecutorServiceSessionValidationScheduler 底层也是默认自动调用ExecutorServiceSessionValidationScheduler

 

创建完成,开始会话校验,

    问题       方法一:开始校验

从线程池获取了线程,并给其装配了校验方法

    方法二:方法从写校验后

 

进行SessionManager中校验后

开始RetriveveSession:恢复session

执行获取sessionid,获取失败,webkey没有

该sessionkey是前面   webKey封装req、res、sessionid

执行获取id

 

到自定义的sessionmanager中的方法:

 

1、从request中获取带有token头的id

若是request里面,没有,默认从cookie中获取id

1、会去判断是否开启自定义cookieid

没开启使用默认

开启的获取到自定义的cookie

--------------以下实在SessionManager中个SimpleCookie----------

readvalue,获取自定义的cookiename

1、遍历request中的所有cookie,判断获取带有该命名的cookie

并获取该cookie中value

原理:以该自定义的name的开头的simplecookie

内部储存的是sessionid

获取到sessionid后开始从数据源获取该session

注意调用的是sessionDao中的readSession()

sessionDao可以

该sessionDao是RedisSessionDao

方法:

序列化SessionId,通过RedisManager获取该数据,反序列化获取Session

Session s = (Session)SerializeUtils.deserialize(redisManager.get(this.getByteKey(sessionId)));

注意:

对象session的id值为下面:

sessiondao中的值

String preKey = this.keyPrefix + sessionId;

获取到的session放入webcontext

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值