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