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,大概流程结束.
完结撒花 (╹▽╹) 如果有帮到你我也很开心哒
Shiro中RememberMe的实现流程相关推荐
- Shiro 实现 RememberMe 功能
本文内容:Shiro 中RememberMe 功能的介绍以及实现. 1 介绍 Shiron 提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你 ...
- Shiro中进行角色与权限认证流程
场景 使用Shiro的JdbcRealm实现查询数据库进行身份认证: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/9010599 ...
- TemplatesImpl在Shiro中的利用
TemplatesImpl在Shiro中的利用 文章首发自: https://www.le1a.com/posts/6e876d26/ 前言 前面学习了CC1.CC3和CC6,其中CC6是不限制版本的 ...
- Shiro 中的 Realm
前言 之前写项目用了 Shiro 框架,来进行安全验证以及权限管理.当时项目赶得急,没怎么深入了解,只能说能跑能改,不过在使用的过程中发现 Shiro 确实很优秀.现在回过头来学习原理,读读源码,深入 ...
- Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)
问题 shiro中提供了rememberMe功能,它用起来是这样的 UsernamePasswordToken token = new UsernamePasswordToken(loginForm. ...
- shiro中的验证用户身份认证以及授权
目录 1.运用shiro进行用户身份认证: 1.1导入基于Shiro的数据库脚本 1.2.引入依赖(shiro-1.4.1) shiro-core shiro-web shiro-spring 1 ...
- Eclipse中创建SpringBoot项目流程,及报错解决方案
Eclipse中创建SpringBoot项目流程,及报错解决方案 参考文章: (1)Eclipse中创建SpringBoot项目流程,及报错解决方案 (2)https://www.cnblogs.co ...
- 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程
文章目录 一.加壳的 Android 应用启动流程 二.使用反射替换 LoadedApk 中的类加载器流程 一.加壳的 Android 应用启动流程 加壳的 Android 应用启动流程 : 加壳的 ...
- 内核中的UDP socket流程(2)——API “sys_socket”
内核中的UDP socket流程(2)--API "sys_socket" 作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net ...
最新文章
- JavaScript如何获得项目根路径
- C++ 指针 vs 数组
- VTK:图片之ImageToPolyDataFilter
- dedeCMS 两个站共用同一个数据库 图片路径统一
- 7.排序、聚合函数、分组查询
- Java笔记-SSLSocket双向认证实例
- 用户生命周期常用指标_生命周期管理工具如何使用指标
- 不要在爬虫犯罪的边缘疯狂试探!
- Windows Server 2003下ASP.NET无法识别IE11的解决方法【转】
- SQL Server查询数据库执行记录
- abb机器人工具坐标系设定方式_设定abb机器人工具坐标的方法
- 【数据库系统工程师】数据库系统工程师考情分析
- 使用Hackintool工具生成全新的序列号及更改黑苹果SN三码序列号简易版教程
- 快速从B站下载视频到本地(无需安装软件)
- Java发送邮件,优美html邮件模板分享
- 【线程 锁】ExecutorService的submit方法使用
- 个人笔记应用 - 思源笔记
- layui layer诡异bug记录
- 2017第49周二乌镇互联网大会总结
- 【知乎】如何看待同学聚会上的言论「我在四线城市跟你在一线城市的年薪一样多(15万元)」?
热门文章
- Android面试题整理(selfmade)——坚持每天回答一个
- C++和qt designer的混合编程--动态计算加法小工具
- 2022-2028全球茶浓缩液市场现状及未来发展趋势
- InvocationTargetException:null 问题解决
- “轻松淘金”开发者:给你揭露网络兼职骗局的套路!
- 驾考科目三教学内容及学时分配
- 解决outlook 2013搜索卡住(不停止)的问题
- Jquery——removeAttr() (坑)
- 【Cocos2dx】精灵触摸跳跃功能
- C#制作简易U盘文件盗取程序