FormAuthenticationFilter
下面的分析流程我们以Post提交表单登陆为例(FormAuthenticationFilter)。
通过第一篇,我们已经知道shrio是如何从Spring MVC中接管web请求的,并且循环调用配置的filters,接下来先看一张filter执行的概览图


调用FormAuthenticationFilter.doFilter()方法,判断当前filter有没有重复执行;
调用doFilterInternal(),真正执行fiter认证流程,执行剩余的filter的链条,请求交给mvc的其他的filter;
调用preHandle方法,返回值非常重要,决定当前的请求要不要继续走剩余的流程。

接下来,详细分析preHandle方法的执行流程:
1.先判断当前请求能否被处理


2.调用onPreHandle()方法

isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);```2.1 isAccessAllowed()本质是从线程局部变量获取Subject对象,判断是否授权。如果是fasle,就会判断是否不是登陆请求&&filter忽略(返回true)。因为登陆请求交给下一步处理
如果返回true,则表示当前请求已经登陆或不是登陆请求且是该Filter忽略的,直接放行。
2.2 当第一步返回false时候,就会调用onAccessDenied()方法,处理未认证的逻辑。![作者:城南码农
链接:https://www.jianshu.com/p/1fd369066307
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。](https://img-blog.csdnimg.cn/20200729211016199.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODM2Mjk0,size_16,color_FFFFFF,t_70)先判断是否为登陆请求,再判断是否是登陆提交表单。是登陆提交表单,就之心executeLogin方法,否则就放行这个filter,跳转登陆页面。
过不是登陆请求,重定向到登陆页面,返回false,filter结束本次请求。executeLogin()执行登陆请求方法![在这里插入图片描述](https://img-blog.csdnimg.cn/20200729211032994.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODM2Mjk0,size_16,color_FFFFFF,t_70)3.1 从登录表单请求中获取用户名和密码,封装为Token,自定义Token可以重写createToken()
3.2 获取Shiro的上文对象
3.3 把包含登陆信息的token执行登陆请求,具体调用Realm的登陆方法,上下文对象中就会存储已经成功认证的信息,下次请求在2.1处就会直接放行。接下来会具体分析Realm的登陆流程。
3.4 登陆成功回调的方法![作者:城南码农
链接:https://www.jianshu.com/p/1fd369066307
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。](https://img-blog.csdnimg.cn/20200729211053919.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0ODM2Mjk0,size_16,color_FFFFFF,t_70)至此,认证的闭环流程完成,3.4的重定向的请求到达2.1的isAccessAllowed()就会返回true,filter直接放行这个请求。
接下的章节会详细分析登陆的subject.login()方法和Subject对象如何让存储登陆信息

Shiro内部过滤器执行顺序相关推荐

  1. springboot过滤字段_SpringBoot自定义过滤器的两种方式及过滤器执行顺序

    第一种 @WebFilter + @ServletComponentScan 注解 1.首先自定义过滤器 如下自定义过滤器 ReqResFilter必须实现  javax.servlet.Filter ...

  2. GO函数内部程序执行顺序

    目录 GO 包 标准库 程序执行顺序 GO 包 包是结构化代码的一种方式:每个程序都由包(通常简称为pkg)的概念组成,可以使用自身的包或者从其它包中 导入内容. 如同其它一些编程语 言中的类库或命名 ...

  3. Spring Cloud Gateway 过滤器执行顺序原理分析

    过滤器类型 GlobalFilter:全局过滤器,对所有路由生效.通过实现GlobalFilter接口创建 GatewayFilter:网关过滤器,也可以说是局部过滤器.自定义过滤器,只对配置了此过滤 ...

  4. php 内部异步执行顺序,event_loop中不同异步操作的执行顺序

    关于js的单线程.怎么创建一个异步任务都是老生常谈的话题了,我们今天就总结一下js不同的异步操作到底执行顺序如何. 首先我们要明白js两种任务类型,一个是macrotask(宏任务),一个是 micr ...

  5. gateway 过滤器执行顺序_Gateway网关源码解析—路由(1.1)之RouteDefinitionLocator一览...

    一.概述 本文主要对 路由定义定位器 RouteDefinitionLocator 做整体的认识. 在 <Spring-Cloud-Gateway 源码解析 -- 网关初始化> 中,我们看 ...

  6. Gateway网关-过滤器链执行顺序

    过滤器执行顺序 请求进入网关会碰到三类过滤器:当前路由的过滤器.DefaultFilter.GlobalFilter 请求路由后,会将当前路由过滤器和DefaultFilter.GlobalFilte ...

  7. java过滤器filter过滤相同url时的执行顺序

    java配置过滤器有两种方式: 第一种:web.xml中以filter-mapping标签方式配置,分为两种,一种是url-pattern,另一种是servlet-name. url-pattern方 ...

  8. java过滤器的执行顺序_Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)...

    Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...

  9. java 过滤器执行图_「filterchain」java 过滤器Filter中chain.doFilter()之前和之后代码的执行顺序 - seo实验室...

    filterchain 过滤器拦截到请求之后,首先是执行doFilter()方法中chain.doFilter()之前的代码,然后放弃权限给下一个过滤器或者serverlet等等,最后才执行chain ...

最新文章

  1. C++测试申请最大内存空间
  2. Nignx平滑升级(1.8.0-1.8.1)
  3. Nginx Rewrite规则初探
  4. html%2b怎么转换成加号,Apache mod_rewrite%2B和加号(+)符号
  5. 详解rel=”nofollow”的用法与意义
  6. window.btoa()方法;使字符编码成base64的形式
  7. 插画在UI的应用体验,太美好了!这样的模板让你的用户更加喜欢!
  8. tensorflow一维卷积输入_深度学习中的反卷积(Transposed Convolution)
  9. 谁有能锁屏不崩溃的录屏软件给推荐个。。。。
  10. 【光学】基于matlab实现圆孔的菲涅尔衍射仿真
  11. html5抓娃娃机微信小游戏源码
  12. 第三章 DirectX 图形绘制(上)
  13. 计算机无法进行磁盘碎片整理,无法启动win7系统磁盘碎片整理的解决方案
  14. CISCO ASR9000 密码恢复
  15. css3动画按钮_CSS3的动画按钮
  16. 关于WIN10开机自动开启小键盘解决方案
  17. 爬虫笔记41之反爬系列四:字体反爬、JS反爬
  18. excel 画散点图 怎么设置图片的分辨率_【R语言】barplot柱状图+散点图+误差棒
  19. 8款最好用的固定资产管理软件
  20. 简单实用的电梯停电报警电路_光电报警电子电路图讲解

热门文章

  1. 闲鱼跳转支付宝源码+独立后台
  2. 如何控制视频输出大小,视频大小实现固定
  3. 软件测试实验五脚本扩展,软件测试实验五
  4. 排序 链表 图 二叉树算法
  5. canvas节点无法导出图片_uniapp canvas绘制图片后无法canvasToTempFilePath导出
  6. 蓝桥杯嵌入式类比赛经验分享
  7. 不用费劲,这5款效率工具为你解决学习工作烦恼
  8. java编写摄氏度转华氏度_JAVA题:编写一个能够转换华氏温度和摄氏温度的程序。在“摄氏温度”文本域输入一个值并点击华氏按钮(两...
  9. h5中利用SQL实现Web留言本
  10. 科大讯飞 唤醒python_用科大讯飞API实现本地语音文件识别