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,完了。。。