| 
					
				 | 
			
			
				@@ -25,11 +25,14 @@ import org.acegisecurity.AuthenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.ConfigAttribute; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.ConfigAttributeDefinition; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.RunAsManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.context.SecurityContextHolder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.event.authorization.AuthenticationCredentialsNotFoundEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.event.authorization.AuthorizationFailureEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.event.authorization.AuthorizedEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.event.authorization.PublicInvocationEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.acegisecurity.runas.NullRunAsManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.logging.Log; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,8 +40,8 @@ import org.apache.commons.logging.LogFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.beans.factory.InitializingBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.springframework.context.ApplicationEventPublisherAware; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.context.ApplicationEventPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.context.ApplicationEventPublisherAware; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.util.Assert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -137,7 +140,7 @@ import java.util.Set; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @version $Id$ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 public abstract class AbstractSecurityInterceptor implements InitializingBean, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ApplicationEventPublisherAware { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ApplicationEventPublisherAware { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //~ Static fields/initializers ============================================= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     protected static final Log logger = LogFactory.getLog(AbstractSecurityInterceptor.class); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -150,6 +153,7 @@ public abstract class AbstractSecurityInterceptor implements InitializingBean, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private AuthenticationManager authenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RunAsManager runAsManager = new NullRunAsManager(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private boolean alwaysReauthenticate = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean rejectPublicInvocations = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private boolean validateConfigAttributes = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //~ Methods ================================================================ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -184,7 +188,8 @@ public abstract class AbstractSecurityInterceptor implements InitializingBean, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return alwaysReauthenticate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void setApplicationEventPublisher(ApplicationEventPublisher eventPublisher) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setApplicationEventPublisher( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ApplicationEventPublisher eventPublisher) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.eventPublisher = eventPublisher; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -217,6 +222,31 @@ public abstract class AbstractSecurityInterceptor implements InitializingBean, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return this.authenticationManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * By rejecting public invocations (and setting this property to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * <code>true</code>), essentially you are ensuring that every secure 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * object invocation advised by <code>AbstractSecurityInterceptor</code> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * has a configuration attribute defined. This is useful to ensure a "fail 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * safe" mode where undeclared secure objects will be rejected and 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * configuration omissions detected early. An 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * <code>IllegalArgumentException</code> will be thrown by the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * <code>AbstractSecurityInterceptor</code> if you set this property to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * <code>true</code> and an attempt is made to invoke a secure object that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * has no configuration attributes. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param rejectPublicInvocations set to <code>true</code> to reject 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *        invocations of secure objects that have no configuration 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *        attributes (by default it is <code>true</code> which treats 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     *        undeclared secure objects as "public" or unauthorized) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setRejectPublicInvocations(boolean rejectPublicInvocations) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.rejectPublicInvocations = rejectPublicInvocations; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean isRejectPublicInvocations() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return rejectPublicInvocations; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void setRunAsManager(RunAsManager runAsManager) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.runAsManager = runAsManager; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -365,6 +395,11 @@ public abstract class AbstractSecurityInterceptor implements InitializingBean, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ConfigAttributeDefinition attr = this.obtainObjectDefinitionSource() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                              .getAttributes(object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ((attr == null) && rejectPublicInvocations) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            throw new IllegalArgumentException( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "No public invocations are allowed via this AbstractSecurityInterceptor. This indicates a configuration error because the AbstractSecurityInterceptor.rejectPublicInvocations property is set to 'true'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (attr != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (logger.isDebugEnabled()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 logger.debug("Secure object: " + object.toString() 
			 |