Acegi配置指南(1)
Acegi Demo
web.xml配置
代碼:
<web-app>
...
<filter>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<filter-class>
org.acegisecurity.util.FilterToBeanProxy
</filter-class>
<init-param>
<param-name>targetBean</param-name>
<param-value>filterChainProxy</param-value>
</init-param>
</filter>
...
<filter-mapping>
<filter-name>Acegi Filter Chain Proxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
</web-app>
說(shuō)明:
采用Web的過(guò)濾器,構(gòu)造一個(gè)過(guò)濾器鏈代理。初始參數(shù):
參數(shù)名 |
描述 |
targetBean |
從Spring中查找Bean名一致的類,交由該類處理真正的Web過(guò)濾。推薦使用。 |
targetClass |
從JVM中查找類名一致的類,交由該類處理真正的Web過(guò)濾。不同J2EE容器可能會(huì)導(dǎo)致不同結(jié)果,會(huì)被targetBean參數(shù)覆蓋。不推薦使用。 |
init |
初始值。可能值包括: Ø lazy:延遲加載。主要解決由于Spring采用ContextLoaderServlet加載模式時(shí)有可能會(huì)晚于該filter而導(dǎo)致filter加載失敗的問(wèn)題。 |
lifecycle |
指定生命周期。可能值包括: Ø servlet-container-managed:容器托管。一般情況下,Acegi的Filter采用Spring的AOP回調(diào),啟動(dòng)和結(jié)束調(diào)用beforeXxx()和afterXxx()方法。如果采用J2EE規(guī)范中提供的filter方法init()和destroy(),設(shè)置該參數(shù)。 |
acegi.xml配置
過(guò)濾器鏈(filterChainProxy)
代碼:
<beans>
...
<!-- 過(guò)濾器鏈代理 -->
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,
basicProcessionFilter,
exceptionTranslationFilter,
filterInvocationInterceptor
</value>
</property>
</bean>
...
</beans>
說(shuō)明:
過(guò)濾器鏈,配置一組過(guò)濾器。參數(shù):
參數(shù) |
描述 |
filterInvocationDefinitionSource |
指定一組過(guò)濾器的Bean名。 |
過(guò)濾器:
過(guò)濾器 |
描述 |
httpSessionContextIntegrationFilter |
負(fù)責(zé)完成Acegi上下文與HTTP Session同步。 |
basicProcessionFilter |
負(fù)責(zé)完成用戶的認(rèn)證。 |
exceptionTranslationFilter |
負(fù)責(zé)處理認(rèn)證和授權(quán)中出現(xiàn)的異常。 |
filterInvocationInterceptor |
負(fù)責(zé)完成用戶的授權(quán)。 |
Spring Bean關(guān)系圖:
說(shuō)明:每個(gè)圖塊為一個(gè)Spring Bean。斜體Bean和同名正體Bean為同一個(gè)Bean。
HTTP會(huì)話集成(httpSessionContextIntegrationFilter)
代碼:
<!-- HTTP會(huì)話集成
-->
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
<property name="allowSessionCreation"
value="false" />
</bean>
說(shuō)明:
負(fù)責(zé)完成Acegi上下文與HTTP Session同步。如果HTTP Session中存放了之前的認(rèn)證信息,將其還原到Acegi上下文中。退出應(yīng)用時(shí)會(huì)清除掉HTTP Session中的認(rèn)證信息。參數(shù):
Bean |
參數(shù) |
描述 |
httpSessionContextIntegrationFilter |
allowSessionCreation |
是否創(chuàng)建Session。可能值包括: Ø true:創(chuàng)建Session。默認(rèn)值。 Ø false:不創(chuàng)建Session 。 |
基本認(rèn)證(basicProcessionFilter)
代碼:
<!-- HTTP基本認(rèn)證 -->
<bean id="basicProcessionFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="basicProssingFilterEntryPoint" />
</bean>
<!-- 認(rèn)證管理器 -->
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>
<!-- 認(rèn)證源提供者 -->
<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="inMemDaoImpl" />
</bean>
<!-- 用戶信息提供者(內(nèi)存級(jí)) -->
<bean id="inMemDaoImpl" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>admin=password,ROLE_ADMIN</value>
</property>
</bean>
<!-- HTTP基本認(rèn)證入口點(diǎn) -->
<bean id="basicProssingFilterEntryPoint" class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="Acegi Demo Realm" />
</bean>
說(shuō)明:
負(fù)責(zé)完成用戶的認(rèn)證,會(huì)調(diào)用認(rèn)證管理器進(jìn)行用戶認(rèn)證。如果認(rèn)證不成功調(diào)用EntryPoint,構(gòu)造返回信息,如401,瀏覽器會(huì)彈出對(duì)話框要求用戶輸入用戶名和密碼。需要指派認(rèn)證管理器、認(rèn)證源和EntryPoint。參數(shù):
Bean |
參數(shù) |
描述 |
basicProcessingFilter |
authenticationManager |
指派認(rèn)證管理器。 |
authenticationEntryPoint |
指派EntryPoint。 |
|
authenticationManager |
providers |
指派認(rèn)證源提供者。多值。 |
daoAuthenticationProvider |
userDetailsService |
指派認(rèn)證實(shí)現(xiàn)服務(wù)。 |
inMemDaoImpl |
userMap |
用戶名/密碼/角色信息,寫死在配置文件中。一般用于演示。格式: uid=pw,role |
basicProssingFilterEntryPoint |
realmName |
返回到瀏覽器的提示信息:域名。 |
Spring Bean關(guān)系圖:
說(shuō)明:每個(gè)圖塊為一個(gè)Spring Bean。斜體Bean和同名正體Bean為同一個(gè)Bean。
異常處理(exceptionTranslationFilter)
代碼:
<!-- 異常處理 -->
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="basicProssionFilterEntryPoint" />
<property name="createSessionAllowed" value="false" />
</bean>
說(shuō)明:
負(fù)責(zé)處理認(rèn)證和授權(quán)中出現(xiàn)的異常。如果出現(xiàn)異常,調(diào)用EntryPoint。參數(shù):
Bean |
參數(shù) |
描述 |
exceptionTranslationFilter |
authenticationEntryPoint |
指派EntryPoint。 |
createSeesionAllowed |
是否創(chuàng)建Session。可能值包括: Ø true:創(chuàng)建Session。默認(rèn)值。 Ø false:不創(chuàng)建Session 。 |
Spring Bean關(guān)系圖:
說(shuō)明:每個(gè)圖塊為一個(gè)Spring Bean。斜體Bean和同名正體Bean為同一個(gè)Bean。
授權(quán)攔截(filterInvocationInterceptor)
代碼:
<!-- 授權(quán)攔截 -->
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
<property name="authenticationManager" ref="authenticationManager" />
<property name="accessDecisionManager" ref="httpRequestAccessDecisionManager" />
<property name="objectDefinitionSource">
<value>
PATTERN_TYPE_APACHE_ANT
/securedpage.jsp=ROLE_ADMIN
</value>
</property>
</bean>
<!-- 授權(quán)策略 -->
<bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
<property name="decisionVoters">
<list>
<ref local="roleVoter" />
</list>
</property>
</bean>
<!-- 投票策略實(shí)現(xiàn) -->
<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" />
負(fù)責(zé)完成用戶的授權(quán)。給受保護(hù)的Web資源指定角色,指定授權(quán)策略。參數(shù):
Bean |
參數(shù) |
描述 |
filterInvocationInterceptor |
authenticationManager |
指派認(rèn)證管理器。 |
accessDecisionManager |
指派訪問(wèn)策略管理器。 |
|
objectDefinitionSource |
Web資源/角色信息,寫死在配置文件中。一般用于演示。格式: /uri=role |
|
accessDecisionManager 授權(quán)策略管理器 |
decisionVoters |
指派投票策略。多值。 |
roleVoter |
無(wú) |
|
Spring Bean關(guān)系圖:
說(shuō)明:每個(gè)圖塊為一個(gè)Spring Bean。斜體Bean和同名正體Bean為同一個(gè)Bean。
監(jiān)聽器
代碼:
<!-- 認(rèn)證監(jiān)聽器 -->
<bean id="authenticationLoggerListener" class="org.acegisecurity.event.authentication.LoggerListener" />
<!-- 授權(quán)監(jiān)聽器 -->
<bean id="authorizationLoggerListener" class="org.acegisecurity.event.authorization.LoggerListener" />
說(shuō)明:
監(jiān)聽Acegi的認(rèn)證/授權(quán)過(guò)程,并生成日志。
完整關(guān)系圖
說(shuō)明:每個(gè)圖塊為一個(gè)Spring Bean。斜體Bean和同名正體Bean為同一個(gè)Bean。
posted on 2010-02-21 09:55 xuyang 閱讀(1024) 評(píng)論(0) 編輯 收藏 所屬分類: Acegi