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

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