Shiro中RememberMe的实现流程

1、rememberMe的创建

1.1 简介

大多数的rememberMe都是使用CookieRememberMeManager来实现的,如果要是使用其他途径则集成AbstractRemeberMeManager这一抽象类,自我实现。

1.2rememberMe的创建

如果登陆的时候验证通过了之后就会调用onSuccessfullLogin()方法
在这里插入图片描述点进去之后 调用一个壳方法
在这里插入图片描述在点进去之后就是熟悉的回去RememberMeManager然后回调他的onSuccessfulLogin()这一方法
在这里插入图片描述在这一方法中一进去之后就是忘记验证
在这里插入图片描述忘记验证中最后会调用removeFrom这一方法,在这一方法中会写一个名为rememberMe值为deleteme生存时间为0的cookie,同时将这个cookie放到response的头上面去,并将这一cookie发送到前台去,无论登陆是否选择记住我都会将这个cookie发送到前台,因为这一cookie的生存时间极端,所以不影响。
在这里插入图片描述前台Response的set-cookie字段如下图
在这里插入图片描述返回的cookie如图,maxAge为0在这里插入图片描述

回到忘记验证那里如果判断该次登陆含有记住我这一选项,如果验证通过则将用户信息通过对象流写出字节数组,将字节数组加密,序列化(看到这里就应该知道的是,用户信息对象必须是实现了虚拟化接口的)
在这里插入图片描述进入rememberIdentity具体实现方法在rememberSerializedIdentity通过saveTo将cookie写到前台去,流程到了这里记住我cookie就生成成功了,并发到了前台中去等待下一次请求携带,至于如何携带cookie到前台,请参考我的另一篇文章 (╹▽╹)。
在这里插入图片描述

2、下一次登陆的流程

下一次登陆必然是关掉浏览器之后的登陆,只要没有清除掉cookie都是生效的,请求接口的时候就会携带这一cookie到后台中,如果请求的接口使用的是user拦截器(UserFilter)那么可以直接通过验证,可以正常访问该接口,可以访问接口了那么页面自然就能渲染出来。
在userFilter中首先判断是否是访问的登陆界面,如果是登陆界面则直接通过,如果不是登陆界面的话则去获取subject信息。
在这里插入图片描述获取去subject的途中会再一次创建subject,这个时候就会调用resolvePrincipals去获取用户信息。
在这里插入图片描述resovelPrincipals方法具体作用(这里只介绍记住我的逻辑)就是去获取rememberMe的cookie信息这个cookie解密之后就是用户信息
在这里插入图片描述点进去之后就是获取RememberMeManager,获取之后调用它的getRememberedPrincipals方法
在这里插入图片描述这个方法里面又去将用户信息转为字节数组,转为字节数组之后又将字节数组解密为用户信息,到这里如果能够从cookie中拿取用户信息的话,则将用户信息放入到subject中去。然后创建subject,大概流程结束.
在这里插入图片描述完结撒花 (╹▽╹) 如果有帮到你我也很开心哒

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值