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的实现流程相关推荐

  1. Shiro 实现 RememberMe 功能

    本文内容:Shiro 中RememberMe 功能的介绍以及实现. 1 介绍 Shiron 提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你 ...

  2. Shiro中进行角色与权限认证流程

    场景 使用Shiro的JdbcRealm实现查询数据库进行身份认证: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/9010599 ...

  3. TemplatesImpl在Shiro中的利用

    TemplatesImpl在Shiro中的利用 文章首发自: https://www.le1a.com/posts/6e876d26/ 前言 前面学习了CC1.CC3和CC6,其中CC6是不限制版本的 ...

  4. Shiro 中的 Realm

    前言 之前写项目用了 Shiro 框架,来进行安全验证以及权限管理.当时项目赶得急,没怎么深入了解,只能说能跑能改,不过在使用的过程中发现 Shiro 确实很优秀.现在回过头来学习原理,读读源码,深入 ...

  5. Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

    问题 shiro中提供了rememberMe功能,它用起来是这样的 UsernamePasswordToken token = new UsernamePasswordToken(loginForm. ...

  6. shiro中的验证用户身份认证以及授权

    目录 1.运用shiro进行用户身份认证: 1.1导入基于Shiro的数据库脚本 1.2.引入依赖(shiro-1.4.1) shiro-core  shiro-web  shiro-spring 1 ...

  7. Eclipse中创建SpringBoot项目流程,及报错解决方案

    Eclipse中创建SpringBoot项目流程,及报错解决方案 参考文章: (1)Eclipse中创建SpringBoot项目流程,及报错解决方案 (2)https://www.cnblogs.co ...

  8. 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程

    文章目录 一.加壳的 Android 应用启动流程 二.使用反射替换 LoadedApk 中的类加载器流程 一.加壳的 Android 应用启动流程 加壳的 Android 应用启动流程 : 加壳的 ...

  9. 内核中的UDP socket流程(2)——API “sys_socket”

    内核中的UDP socket流程(2)--API "sys_socket" 作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net ...

最新文章

  1. JavaScript如何获得项目根路径
  2. C++ 指针 vs 数组
  3. VTK:图片之ImageToPolyDataFilter
  4. dedeCMS 两个站共用同一个数据库 图片路径统一
  5. 7.排序、聚合函数、分组查询
  6. Java笔记-SSLSocket双向认证实例
  7. 用户生命周期常用指标_生命周期管理工具如何使用指标
  8. 不要在爬虫犯罪的边缘疯狂试探!
  9. Windows Server 2003下ASP.NET无法识别IE11的解决方法【转】
  10. SQL Server查询数据库执行记录
  11. abb机器人工具坐标系设定方式_设定abb机器人工具坐标的方法
  12. 【数据库系统工程师】数据库系统工程师考情分析
  13. 使用Hackintool工具生成全新的序列号及更改黑苹果SN三码序列号简易版教程
  14. 快速从B站下载视频到本地(无需安装软件)
  15. Java发送邮件,优美html邮件模板分享
  16. 【线程 锁】ExecutorService的submit方法使用
  17. 个人笔记应用 - 思源笔记
  18. layui layer诡异bug记录
  19. 2017第49周二乌镇互联网大会总结
  20. 【知乎】如何看待同学聚会上的言论「我在四线城市跟你在一线城市的年薪一样多(15万元)」?

热门文章

  1. Android面试题整理(selfmade)——坚持每天回答一个
  2. C++和qt designer的混合编程--动态计算加法小工具
  3. 2022-2028全球茶浓缩液市场现状及未来发展趋势
  4. InvocationTargetException:null 问题解决
  5. “轻松淘金”开发者:给你揭露网络兼职骗局的套路!
  6. 驾考科目三教学内容及学时分配
  7. 解决outlook 2013搜索卡住(不停止)的问题
  8. Jquery——removeAttr() (坑)
  9. 【Cocos2dx】精灵触摸跳跃功能
  10. C#制作简易U盘文件盗取程序