<beans>
. . .
<bean id="securityInterceptor"
class="org.acegisecurity.intercept.method.
aopalliance.MethodSecurityInterceptor">
<property name="authenticationManager">
<bean class="org.acegisecurity.
providers.ProviderManager">
<property name="providers">
<list>
<bean
class="org.acegisecurity.
providers.anonymous.
AnonymousAuthenticationProvider">
<property
name="key"
value="changeThis"/>
</bean>
</list>
</property>
</bean>
</property>
<property name="accessDecisionManager">
<bean
class="org.acegisecurity.vote.
UnanimousBased">
<property name="decisionVoters">
<list>
<bean
class="org.acegisecurity.
vote.RoleVoter"/>
</list>
</property>
</bean>
</property>
<property
name="objectDefinitionSource">
<value>
com.mybank.bizlogic.AccountMgr.
transferFunds=ROLE_MANAGER
</value>
</property>
</bean>
. . .
</beans>
我們需要配置帶有authenticationManager屬性的securityInterceptor bean,以指定使用哪種類型的認證。由于我們的設計依靠Axis 處理程序來執行認證,而這里不需要認證,因此僅使用AnonymousAuthenticationProvider進行配置。另外,我們在Axis處理程序中創建認證令牌的方式會使Acegi獲知它已經進行了認證,因此不會嘗試再次認證。稍后討論Axis處理程序時,我們將對此進行更加詳細的解釋。
接下來,我們需要配置帶有accessDecisionManager屬性的bean,以指定如何決定是否授權某用戶進行訪問以調用方法。Acegi具有訪問決策管理器(access decision manager)的三個具體實現:AffirmativeBased、ConsensusBased和UnanimousBased。Acegi根據投票人對是否授權某用戶進行訪問以執行特定操作的投票,來實施訪問策略。計算投票數來決定是否應該授權訪問。我們選擇了UnanimousBased訪問決策管理器,為了客戶端能夠執行操作,需要所有的投票都授權訪問。用戶應該閱讀Acegi文檔,以獲取對該訪問決策的更深入說明。下面,我們必須配置帶有投票人列表的accessDecisionManager。這里我們僅使用一個名為RoleVoter投票人。這是來自Acegi的類,根據基于角色訪問控制對是否授權訪問進行投票。用戶還應參考Acegi文檔,以獲取對RoleVoter工作方式的更深入說明。
需要配置的最后一個屬性是objectDefinitionSource。這就是如何指定訪問受保護的對象上不同方法所需要的認證。在這里,我們只想保護transferFunds()方法,并且只允許訪問manager。通過列出所有符合條件的類名、方法名和進行訪問所需的角色來實現:
文章來源于領測軟件測試網 http://www.kjueaiud.com/