首先要配置一個(gè)filter,這個(gè)filter用一個(gè)代理bean寫在了spring里面,其實(shí)根正常的filter沒有任何區(qū)別。
"filterInvocationInterceptor" 是一個(gè)攔截器,說是攔截器,其實(shí)就是在filter里面執(zhí)行一下他的攔截方法,這里可沒有什么aop.
authenticationEntryPoint 交驗(yàn)失敗的時(shí)候轉(zhuǎn)到的地方,為什么說是地方,因?yàn)橥ㄟ^配置可以轉(zhuǎn)到其它的url甚至其它的協(xié)議下(http 轉(zhuǎn)到 https等等)
這個(gè)就是失敗的時(shí)候轉(zhuǎn)到的地方,我們可以配置url和是否使用https
這個(gè)就是前面提到的攔截器。簡單解釋一下:
authenticationManager 在acegi里面的主要作用就是管理維護(hù)用戶的權(quán)限角色等信息,比方說想要用戶的ROLE就要在這里面拿了。里面配置了多種全縣的來源,可以從DAO里面來(就是數(shù)據(jù)庫里面),可以是cookies里面的,也可以是匿名的權(quán)限,每種權(quán)限都以一種Provider的形式提供:
objectDefinitionSource在acegi里面就是配置權(quán)限信息,說明哪一個(gè)url需要什么權(quán)限才能訪問,acegi默認(rèn)用<value>來表示,其實(shí)這正是acegi的不足之處,還好能夠補(bǔ)救。我來說明一下:
我們知道在spring里面<value>標(biāo)簽比較特殊,spring首先找到這個(gè)屬性的類型,然后把value里面的內(nèi)容以String的類型取出來(Spring做了一下包裝,為TypedString)。然后根據(jù)這個(gè)屬性的類型找他的Editer,然后用Editer來處理String為需要的類型。但是我們不希望用String來表達(dá)url,很明顯url里面有=就不會(huì)玩了。我們可以把這個(gè)信息寫到數(shù)據(jù)庫里面,然后讀取,這里面不說了以前有一位高手已經(jīng)解釋過了。
接下來就是httpRequestAccessDecisionManager了,AccessDecisionManager在acegi里面是決策者,就是根據(jù)你所擁有的權(quán)限和訪問URL需要的權(quán)限來決定你到底能不能訪問。
決策者里面是投票者,這個(gè)上面已經(jīng)解釋過了,一個(gè)投票者校驗(yàn)一種權(quán)限。整個(gè)流程已經(jīng)說完了。