Apache Shiro源码原理解读1
来源:互联网 发布:德国蜗牛再生精华知乎 编辑:程序博客网 时间:2024/06/14 06:33
先从web application的配置文件说起,请先读这里,Apache Shiro Web Support,
我们看到需要配置EnvironmentLoaderListener和ShiroFilter,我们一步一步来看看这里面做了什么。
先来几张图,让大家有个整体的概念,如下,图1,
再看EnvironmentLoaderListener,做了些什么,如下图,
determineWebEnvironmentClass会返回IniWebEnvironment,LifecycleUtils.init()方法会最终调用IniWebEnvironment.init()方法进行WebEnvironment的初始化。
接着我们看下图2
我们来看看IniWebEnvironment做了什么,
getIni()方法会读取默认或指定的配置文件,进行文件预处理成Ini对象,就是key-value对,value是Section对象,继承于Map,也是k-v对。
最最重要的两个操作就是,createWebSecurityManager和createFilterChainResolver,并设置到IniWebEnvironment中。
如下,图3,大部分逻辑集中在AbstractShiroFilter中,这个类中有两个重要的方法,
doFilterInternal()保证是OncePerRequest,是每个request进来会执行的方法,看api说明,最终最重要的执行方法是executeChain()方法
如上图所示,通过FilterChainManager查找FilterChain,通过pathMatches()方法进行路径匹配(最终调用的是AntPathMatcher类),如果配置到,就执行doFilter()方法并返回,注意这个return,说明ini配置文件中[urls]规则内容是从上到下,依次匹配的,这是个短路操作,所以,在配置[urls]规则时,推荐规格由上到下,由严到宽,这样的配置方式,当然,也可以在这里修改配置规则,进行and匹配。
通过以上分析,我们至少可以明白,SevletContext域中保存了WebEnvironment,而WebEnvironment中保存了securityManager和FilterChainManager,这两个对象是很重要的对象。
初始化先分析到此,后续会再分享一些重要的对象。
- Apache Shiro源码原理解读1
- Apache shiro测试及其原理
- Apache OFbiz MiniLang 源码解读
- Apache OFbiz MiniLang 源码解读
- 1 Apache Shiro 简介
- Apache common-pool, common-dbcp源码解读与对象池原理剖析
- 【pool】Apache common-pool, common-dbcp源码解读与对象池原理剖析
- Apache Shiro源码 拦截器过程
- Apache Shiro学习(2)--源码分析
- 源码解读Spring IOC原理
- 源码解读Spring IOC原理
- 源码解读Spring IOC原理
- spring源码解读 AOP原理
- 源码解读Spring IOC原理
- Caffe源码解读:BatchNormLayer原理
- Spring:源码解读IOC原理
- MyBatis插件原理-源码解读
- java-源码解读-线程池实现原理-1
- Activity的生命周期方法
- bzoj2982: combination 组合数 卢卡斯定理
- urb
- 11.14
- 欧拉函数
- Apache Shiro源码原理解读1
- unity 判断触摸坐标是否落在ui上
- 修改input file控件默认浏览文字
- phpMyAdmin中sql-parser组件的使用
- Android 使用 百度地图 测量 多边形面积
- Android studio运行添加签名文件
- xml有效性验证
- 结对读书召集中…………(目前主要是计算机相关书籍,但不仅仅是计算机相关书籍)
- 基于TBDS的flume异常问题排查过程