2) httpSessionContextIntegrationFilter
每次request前 HttpSessionContextIntegrationFilter從Session中獲取Authentication對象,在request完后, 又把Authentication對象保存到Session中供下次request使用,此filter必須其他Acegi filter前使用,使之能跨越多個(gè)請求。
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
</bean>
3) basicProcessingFilter
用于處理HTTP頭的認(rèn)證信息,如從Spring遠(yuǎn)程協(xié)議(如Hessian和Burlap)或普通的瀏覽器如IE,Navigator的HTTP頭中獲取用戶信息,將他們轉(zhuǎn)交給通過authenticationManager屬性裝配的認(rèn)證管理器。如果認(rèn)證成功,會(huì)將一個(gè)Authentication對象放到會(huì)話中,否則,如果認(rèn)證失敗,會(huì)將控制轉(zhuǎn)交給認(rèn)證入口點(diǎn)(通過authenticationEntryPoint屬性裝配)
<bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />
</bean>
4) basicProcessingFilterEntryPoint
通過向?yàn)g覽器發(fā)送一個(gè)HTTP401(未授權(quán))消息,提示用戶登錄。
處理基于HTTP的授權(quán)過程, 在當(dāng)驗(yàn)證過程出現(xiàn)異常后的"去向",通常實(shí)現(xiàn)轉(zhuǎn)向、在response里加入error信息等功能。
<bean id="basicProcessingFilterEntryPoint"
class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="Acegi First Realm Name" />
</bean>
其中,realmName屬性取值并不存在太多的實(shí)際含義,運(yùn)行時(shí),”Acegi First Realm Name“字符串會(huì)顯示在IE瀏覽器彈出的HTTP BASIC認(rèn)證對話框中。
5) exceptionTranslationFilter
異常轉(zhuǎn)換過濾器,主要是處理AccessDeniedException和AuthenticationException,將給每個(gè)異常找到合適的"去向"
<bean id="exceptionTranslationFilter"
class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />
</bean>
在此,如果認(rèn)證不通過將會(huì)將控制轉(zhuǎn)交給認(rèn)證入口點(diǎn)(通過authenticationEntryPoint屬性裝配)
6) authenticationManager
起到認(rèn)證管理的作用,它將驗(yàn)證的功能委托給多個(gè)Provider,并通過遍歷Providers, 以保證獲取不同來源的身份認(rèn)證,若某個(gè)Provider能成功確認(rèn)當(dāng)前用戶的身份,authenticate()方法會(huì)返回一個(gè)完整的包含用戶授權(quán)信息的Authentication對象,否則會(huì)拋出一個(gè)AuthenticationException。
Acegi提供了不同的AuthenticationProvider的實(shí)現(xiàn),如:
DaoAuthenticationProvider 從數(shù)據(jù)庫中讀取用戶信息驗(yàn)證身份
AnonymousAuthenticationProvider 匿名用戶身份認(rèn)證
RememberMeAuthenticationProvider 已存cookie中的用戶信息身份認(rèn)證
AuthByAdapterProvider 使用容器的適配器驗(yàn)證身份
CasAuthenticationProvider 根據(jù)Yale中心認(rèn)證服務(wù)驗(yàn)證身份, 用于實(shí)現(xiàn)單點(diǎn)登陸
JaasAuthenticationProvider 從JASS登陸配置中獲取用戶信息驗(yàn)證身份
RemoteAuthenticationProvider 根據(jù)遠(yuǎn)程服務(wù)驗(yàn)證用戶身份
RunAsImplAuthenticationProvider 對身份已被管理器替換的用戶進(jìn)行驗(yàn)證
X509AuthenticationProvider 從X509認(rèn)證中獲取用戶信息驗(yàn)證身份
TestingAuthenticationProvider 單元測試時(shí)使用
每個(gè)認(rèn)證者會(huì)對自己指定的證明信息進(jìn)行認(rèn)證,如DaoAuthenticationProvider僅對UsernamePasswordAuthenticationToken這個(gè)證明信息進(jìn)行認(rèn)證。
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>