IniWebEnvironment中的FilterChainResolver加载过程分析

IniWebEnvironment中,有两个shiro中最重要的对象,WebSecurityManager和FilterChainResolver,今天我们来看看FilterChainResolver是如何加载的。


1步,[urls]这个Section,是filterChainResolver的重点

2步,[filters]已经不提倡被使用,替换的方法是放到[main]Section中进行配置

IniFilterChainResolverFactory是个抽象工场,最终会调用它的实例方法createInstance()。




看到了吧,直接new出来几个重要的对象,AntPathMather是FilterChainResolver的核心之一,是用来进行路径匹配的,像spring mvc, struts2什么的,都有类似的类。


看这个addDefaultFilters()方法,这个方法会加载shiro默认的一些filte,shiro官网有一个列表,我们去看方法实现。





看明白了吧,就是在这里加载这些defaultFilter的。

我们再回到IniFilterChainResolverFactory.bindChains()方法


1步,获取所有的filter,filter会被更早的WebSecurityManager给初始化创建,我们下一次再说WebSecurityManager。

2步,注册filter,其实就是像一个map中添加这个filter,key是filter名字,这些filter都实现了nameable接口。

3步,就是创建具体的filterChain了,参数section专指[urls]这一块内容,section就是个map,会遍历这个map,key就是你配置的path,value就是安全规则了,比如

/system=authc, roles[admin, super], perms[security:*]

key就是/system,解析value,根据filterName,如authc, roles, perms绑定具体的filter

Ok,完了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章