<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!--
 * Copyright 2004 Acegi Technology Pty Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *
 * $Id: applicationContext-annotations.xml 1109 2005-11-17 00:56:49Z benalex $
-->

<beans>

	<!-- =================== SECURITY SYSTEM DEFINITIONS ================== -->
	
	<!-- RunAsManager -->
	<bean id="runAsManager" class="org.acegisecurity.runas.RunAsManagerImpl">
     	<property name="key"><value>my_run_as_password</value></property>
 	</bean>

	<!-- ~~~~~~~~~~~~~~~~~~~~ AUTHENTICATION DEFINITIONS ~~~~~~~~~~~~~~~~~~ -->

	<!-- This authentication provider accepts any presented TestingAuthenticationToken -->
	<bean id="testingAuthenticationProvider" class="org.acegisecurity.providers.TestingAuthenticationProvider"/>

	<!-- The authentication manager that iterates through our only authentication provider -->
	<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
		<property name="providers">
		  <list>
		    <ref local="testingAuthenticationProvider"/>
		  </list>
		</property>
	</bean>

	<!-- ~~~~~~~~~~~~~~~~~~~~ AUTHORIZATION DEFINITIONS ~~~~~~~~~~~~~~~~~~~ -->

	<!-- An access decision voter that reads ROLE_* configuaration settings -->
	<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter"/>

	<!-- A unanimous access decision manager -->
	<bean id="accessDecisionManager" class="org.acegisecurity.vote.UnanimousBased">
   		<property name="allowIfAllAbstainDecisions"><value>false</value></property>
		<property name="decisionVoters">
		  <list>
		    <ref local="roleVoter"/>
		  </list>
		</property>
	</bean>
	
	<!-- ===================== SECURITY DEFINITIONS ======================= -->
	
	<bean id="attributes" class="org.acegisecurity.annotation.SecurityAnnotationAttributes"/>
	
	<bean id="objectDefinitionSource" class="org.acegisecurity.intercept.method.MethodDefinitionAttributes">
		<property name="attributes"><ref local="attributes"/></property>
	</bean>

	<!-- We don't validate config attributes, as it's unsupported by MethodDefinitionAttributes -->
	<bean id="securityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
    	<property name="validateConfigAttributes"><value>false</value></property>
    	<property name="authenticationManager"><ref local="authenticationManager"/></property>
    	<property name="accessDecisionManager"><ref local="accessDecisionManager"/></property>
    	<property name="runAsManager"><ref local="runAsManager"/></property>
 		<property name="objectDefinitionSource"><ref local="objectDefinitionSource"/></property>
	</bean>
	
	<bean id="bankService" class="sample.annotations.BankServiceImpl"/>
	
	<!--
		This bean is a postprocessor that will automatically apply relevant advisors
		to any bean in child factories.
	-->
	<bean id="autoproxy" 
		class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
	</bean>

	<!--
		AOP advisor that will automatically wire the MethodSecurityInterceptor (above)
		into BankServiceImpl (above). The configuration attributes used are obtained
		from the securityInterceptor.objectDefinitionSouce, which in the
		above configuration is a JDK 5 Annotations Attributes-based source.
	-->
	<bean id="methodSecurityAdvisor"
		class="org.acegisecurity.intercept.method.aopalliance.MethodDefinitionSourceAdvisor"
		autowire="constructor" >
	</bean>
	

</beans>
