当前位置: 首页 > news >正文

网站dns服务深圳住房和建设局网站 招标

网站dns服务,深圳住房和建设局网站 招标,濮阳网站建设网站,品牌营销传播一、背景 在使用若依框架(前后端不分离包含shiro安全框架)时,发现作者添加了验证码、登录帐号控制等自定义过滤器,于是对自定的过滤器加载和执行流程产生疑问。下面以验证码过滤器为例,对源码解析。注意类之间的继承关…

一、背景

在使用若依框架(前后端不分离包含shiro安全框架)时,发现作者添加了验证码、登录帐号控制等自定义过滤器,于是对自定的过滤器加载和执行流程产生疑问。下面以验证码过滤器为例,对源码解析。注意类之间的继承关系和类中属性存储的值。

二、过滤器加载流程

1、ShiroFilterFactoryBean类创建

(1)、在ShiroConfig中有ShiroFilterFactoryBean创建及配置类(若依中使用的是CustomShiroFilterFactoryBean,继承了ShiroFilterFactoryBean),其中有两个重要配置,一是filters,自定义过滤器Map集合,key为拦截器别名,可以配置在FilterChainDefinitionMap中value值,value是过滤器实体,二是FilterChainDefinitionMap,key为要过滤的url,value是使用的过滤器别名,需要和filters中key值匹配。例如如下图,/login及/register两个url会被验证码过滤器过滤。
在这里插入图片描述

2、FilterChainManager类创建

(1)、CustomShiroFilterFactoryBean继承了ShiroFilterFactoryBean实现了FactoryBean类所以spring创建这种类型的类时,会执行getObject如果对象不存在则创建执行createInstance。在这里插入图片描述
(2)、在createInstance 中会执行createFilterChainManager方法创建FilterChainManager,createFilterChainManager方法中会给FilterChainManager设置两个重要属性,第一个遍历(1.1处配置)filters集合给FilterChainManager中的filters集合赋值,key为filter别名,value为filter实体,此时会给Nameable类型filter设置Name为filter别名。此时FilterChainManager中属性filters中添加了所有自定义过滤器和系统默认的过滤器。系统默认过滤器时在创建对象DefaultFilterChainManager构造方法中调用addDefaultFilters添加,DefaultFilterChainManager继承FilterChainManager。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)、获取(上面1.1配置)FilterChainDefinitionMap过滤器链并遍历,在DefaultFilterChainManager中执行createChain创建过滤器执行链。
在这里插入图片描述
filterTokens为filter别名数组,遍历数组执行addToChain,第一个参数是url,第二个是filter别名,第三个是filter配置参数。继续跟踪addToChain。在这里插入图片描述
(4)、SimpleNamedFilterList实现了NamedFilterList类,addToChain方法中创建SimpleNamedFilterList类,ensureChain方法把filter放入SimpleNamedFilterList类属性backingList集合中。DefaultFilterChainManager中属性filterChains中存的是以url为key,value是SimpleNamedFilterList类型的对象。
在这里插入图片描述
在这里插入图片描述
(5)、总结一下,创建DefaultFilterChainManager完成后,DefaultFilterChainManager中有两个重要属性,一个是filters所有过滤器map集合,第二个是filterChains所有url对应过滤器链,例如/login,对应SimpleNamedFilterList类中属性backingList集合中有invaldRequetFilter、AnonymousFiter、CaptchaValidateFilter三个过滤器。

3、MySpringShiroFilter类创建

PathMatchingFilterChainResolver类中setFilterChainManager把2中创建的DefaultFilterChainManager设置到filterChainManager属性中。创建MySpringShiroFilter时,通过构造函数把PathMatchingFilterChainResolver传入。MySpringShiroFilter继承自AbstractShiroFilter,最终给AbstractShiroFilter的属性filterChainResolver赋值。
在这里插入图片描述
在这里插入图片描述
总结一下,通过shiroConifg类最终创建出的mySpringShiroFilter继承AbstactShiroFilter,AbstactShiroFilter中属性filterChainResolver为pathMatchingFilterChainResolver,AbstactShiroFilter继承了OncePerRequestFilter,所以在过滤url时执行doFilterInternal方法。

4、过滤器执行流程

doFilterInternal中执行executeChain->getExecutionChain在这里插入图片描述
getFilterChainResolver获取PathMatchingFilterChainResolver,执行PathMatchingFilterChainResolver中的getChain
在这里插入图片描述
如下图执行步骤,匹配成功后执行DefaultFilterChainManager类中proxy方法。在这里插入图片描述
通过url获取SimpleNamedFilterList类,执行SimpleNamedFilterList类中proxy方法。在这里插入图片描述
创建出ProxiedFilterChain对象,其中第二个参数是SimpleNamedFilterList自身。在这里插入图片描述在这里插入图片描述
最终返回ProxiedFilterChain对象,执行ProxiedFilterChain中doFilter方法,会按顺序执行该url对应的过滤器。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
captchaValidateFilter继承关系,执行captchaValidateFilter的doFilter方法
在这里插入图片描述
时会进入父类OncePerRequestFilter的doFilterInternal,在这里插入图片描述
进入父类adviceFilter的doFilterInernal,在这里插入图片描述

进入父类PathMatchingFilter中preHandle,配上url后,执行isFilterChainContinued在这里插入图片描述
在这里插入图片描述
执行到父类AccessControlFilter的onPreHandle,最终执行到本类CaptchaValidateFilter的onAccessDenied和onAccessDenied方法,有一个满足即为true.
在这里插入图片描述
执行完成后,继续返回到adviceFilter.判断是否继续执行下一个filter。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

http://www.yayakq.cn/news/83742/

相关文章:

  • 河南省教育类网站前置审批提升学历研究生
  • 我要建网站大良陈村网站建设
  • dw怎么做网站如何能快速搜到新做网站链接
  • 萧山网站建设推广网信息发布平台
  • 手机网站建设专业服务公司物流公司做网站注重什么问题
  • 淘宝刷单网站开发购物型网站
  • 百度网站优点北京网站优化方案
  • 网站虚拟空间过期域名注册流程
  • 深圳建站公司兴田德润放心wordpress模版如何使用教程
  • 网站设计是用什么软件做网站界面分析
  • 绿色食品网站模板南沙免费网站建设
  • 网站设计毕业设计论文专业的高密网站建设
  • 中国工厂网站广告设计专业描述
  • 兰州市网站建设公司找别人做的淘客网站 会不会有问题
  • seo网站优化推广费用怎么开网店新手入门拼多多店铺
  • 网站由哪些部分组成部分组成建设网站不要服务器可以吗
  • 固镇做网站多少钱培训管理平台
  • 灵犀 科技高端网站建设wordpress 移动 seo
  • 嘉兴网站搭建网站数据库地址是什么
  • 在百度做推广送网站好吗怎么做网络广告
  • 泰州网站建设找思创细胞医疗 网站模版
  • 怎么建设网站百度搜索的到在线crm百科
  • 网站源码 手机 微信营销网站 需求说明
  • 广州南沙区建设局网站寺院网站建设方案
  • 正规接单网站设计iphone手机网站
  • 做国外网站用国内服务器成都微网站开发
  • 有什么国外的设计网站推荐网址导航系统
  • 网站北京备案快吗大岭山营销型网站建设
  • 东莞做网站的联系电话做婚纱网站是怎么确认主题
  • 九江浔阳网站建设电子商务网站成本