diff --git a/core/src/main/java/org/acegisecurity/runas/RunAsManagerImpl.java b/core/src/main/java/org/acegisecurity/runas/RunAsManagerImpl.java
index dd6955a0b2..67238ff8c7 100644
--- a/core/src/main/java/org/acegisecurity/runas/RunAsManagerImpl.java
+++ b/core/src/main/java/org/acegisecurity/runas/RunAsManagerImpl.java
@@ -22,8 +22,6 @@ import net.sf.acegisecurity.GrantedAuthority;
import net.sf.acegisecurity.GrantedAuthorityImpl;
import net.sf.acegisecurity.RunAsManager;
-import org.aopalliance.intercept.MethodInvocation;
-
import org.springframework.beans.factory.InitializingBean;
import java.util.Iterator;
@@ -72,7 +70,7 @@ public class RunAsManagerImpl implements RunAsManager, InitializingBean {
}
public Authentication buildRunAs(Authentication authentication,
- MethodInvocation invocation, ConfigAttributeDefinition config) {
+ Object object, ConfigAttributeDefinition config) {
List newAuthorities = new Vector();
Iterator iter = config.getConfigAttributes();
@@ -111,4 +109,16 @@ public class RunAsManagerImpl implements RunAsManager, InitializingBean {
return false;
}
}
+
+ /**
+ * This implementation supports any type of class, because it does not
+ * query the presented secure object.
+ *
+ * @param clazz the secure object
+ *
+ * @return alwaus true
+ */
+ public boolean supports(Class clazz) {
+ return true;
+ }
}
diff --git a/core/src/main/java/org/acegisecurity/vote/AbstractAccessDecisionManager.java b/core/src/main/java/org/acegisecurity/vote/AbstractAccessDecisionManager.java
index 935338cc8f..cbb8e517ac 100644
--- a/core/src/main/java/org/acegisecurity/vote/AbstractAccessDecisionManager.java
+++ b/core/src/main/java/org/acegisecurity/vote/AbstractAccessDecisionManager.java
@@ -98,6 +98,33 @@ public abstract class AbstractAccessDecisionManager
return false;
}
+ /**
+ * Iterates through all AccessDecisionVoters and ensures each
+ * can support the presented class.
+ *
+ *
+ * If one or more voters cannot support the presented class,
+ * false is returned.
+ *
AccessDecisionVoter implementation is
+ * able to provide access control votes for the indicated secured object
+ * type.
+ *
+ * @param clazz the class that is being queried
+ *
+ * @return true if the implementation can process the indicated class
+ */
+ public boolean supports(Class clazz);
+
/**
* Indicates whether or not access is granted.
*
@@ -91,13 +100,13 @@ public interface AccessDecisionVoter {
*
*
* @param authentication the caller invoking the method
- * @param invocation the method being called
+ * @param object the secured object
* @param config the configuration attributes associated with the method
* being invoked
*
* @return either {@link #ACCESS_GRANTED}, {@link #ACCESS_ABSTAIN} or
* {@link #ACCESS_DENIED}
*/
- public int vote(Authentication authentication, MethodInvocation invocation,
+ public int vote(Authentication authentication, Object object,
ConfigAttributeDefinition config);
}
diff --git a/core/src/main/java/org/acegisecurity/vote/AffirmativeBased.java b/core/src/main/java/org/acegisecurity/vote/AffirmativeBased.java
index f9e9fd0c49..3c258e368f 100644
--- a/core/src/main/java/org/acegisecurity/vote/AffirmativeBased.java
+++ b/core/src/main/java/org/acegisecurity/vote/AffirmativeBased.java
@@ -19,8 +19,6 @@ import net.sf.acegisecurity.AccessDeniedException;
import net.sf.acegisecurity.Authentication;
import net.sf.acegisecurity.ConfigAttributeDefinition;
-import org.aopalliance.intercept.MethodInvocation;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -55,21 +53,20 @@ public class AffirmativeBased extends AbstractAccessDecisionManager {
*
*
* @param authentication the caller invoking the method
- * @param invocation the method being called
+ * @param object the secured object
* @param config the configuration attributes associated with the method
* being invoked
*
* @throws AccessDeniedException if access is denied
*/
- public void decide(Authentication authentication,
- MethodInvocation invocation, ConfigAttributeDefinition config)
- throws AccessDeniedException {
+ public void decide(Authentication authentication, Object object,
+ ConfigAttributeDefinition config) throws AccessDeniedException {
Iterator iter = this.getDecisionVoters().iterator();
int deny = 0;
while (iter.hasNext()) {
AccessDecisionVoter voter = (AccessDecisionVoter) iter.next();
- int result = voter.vote(authentication, invocation, config);
+ int result = voter.vote(authentication, object, config);
switch (result) {
case AccessDecisionVoter.ACCESS_GRANTED:
diff --git a/core/src/main/java/org/acegisecurity/vote/ConsensusBased.java b/core/src/main/java/org/acegisecurity/vote/ConsensusBased.java
index 826cfbd1f4..9e7dfd37a3 100644
--- a/core/src/main/java/org/acegisecurity/vote/ConsensusBased.java
+++ b/core/src/main/java/org/acegisecurity/vote/ConsensusBased.java
@@ -19,8 +19,6 @@ import net.sf.acegisecurity.AccessDeniedException;
import net.sf.acegisecurity.Authentication;
import net.sf.acegisecurity.ConfigAttributeDefinition;
-import org.aopalliance.intercept.MethodInvocation;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -73,15 +71,14 @@ public class ConsensusBased extends AbstractAccessDecisionManager {
*
*
* @param authentication the caller invoking the method
- * @param invocation the method being called
+ * @param object the secured object
* @param config the configuration attributes associated with the method
* being invoked
*
* @throws AccessDeniedException if access is denied
*/
- public void decide(Authentication authentication,
- MethodInvocation invocation, ConfigAttributeDefinition config)
- throws AccessDeniedException {
+ public void decide(Authentication authentication, Object object,
+ ConfigAttributeDefinition config) throws AccessDeniedException {
Iterator iter = this.getDecisionVoters().iterator();
int grant = 0;
int deny = 0;
@@ -89,7 +86,7 @@ public class ConsensusBased extends AbstractAccessDecisionManager {
while (iter.hasNext()) {
AccessDecisionVoter voter = (AccessDecisionVoter) iter.next();
- int result = voter.vote(authentication, invocation, config);
+ int result = voter.vote(authentication, object, config);
switch (result) {
case AccessDecisionVoter.ACCESS_GRANTED:
diff --git a/core/src/main/java/org/acegisecurity/vote/RoleVoter.java b/core/src/main/java/org/acegisecurity/vote/RoleVoter.java
index f9f2188233..f0baada65f 100644
--- a/core/src/main/java/org/acegisecurity/vote/RoleVoter.java
+++ b/core/src/main/java/org/acegisecurity/vote/RoleVoter.java
@@ -19,8 +19,6 @@ import net.sf.acegisecurity.Authentication;
import net.sf.acegisecurity.ConfigAttribute;
import net.sf.acegisecurity.ConfigAttributeDefinition;
-import org.aopalliance.intercept.MethodInvocation;
-
import java.util.Iterator;
@@ -56,7 +54,19 @@ public class RoleVoter implements AccessDecisionVoter {
}
}
- public int vote(Authentication authentication, MethodInvocation invocation,
+ /**
+ * This implementation supports any type of class, because it does not
+ * query the presented secure object.
+ *
+ * @param clazz the secure object
+ *
+ * @return always true
+ */
+ public boolean supports(Class clazz) {
+ return true;
+ }
+
+ public int vote(Authentication authentication, Object object,
ConfigAttributeDefinition config) {
int result = ACCESS_ABSTAIN;
Iterator iter = config.getConfigAttributes();
diff --git a/core/src/main/java/org/acegisecurity/vote/UnanimousBased.java b/core/src/main/java/org/acegisecurity/vote/UnanimousBased.java
index d835b7affd..62ed101c49 100644
--- a/core/src/main/java/org/acegisecurity/vote/UnanimousBased.java
+++ b/core/src/main/java/org/acegisecurity/vote/UnanimousBased.java
@@ -20,8 +20,6 @@ import net.sf.acegisecurity.Authentication;
import net.sf.acegisecurity.ConfigAttribute;
import net.sf.acegisecurity.ConfigAttributeDefinition;
-import org.aopalliance.intercept.MethodInvocation;
-
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -63,15 +61,14 @@ public class UnanimousBased extends AbstractAccessDecisionManager {
*
*
* @param authentication the caller invoking the method
- * @param invocation the method being called
+ * @param object the secured object
* @param config the configuration attributes associated with the method
* being invoked
*
* @throws AccessDeniedException if access is denied
*/
- public void decide(Authentication authentication,
- MethodInvocation invocation, ConfigAttributeDefinition config)
- throws AccessDeniedException {
+ public void decide(Authentication authentication, Object object,
+ ConfigAttributeDefinition config) throws AccessDeniedException {
int grant = 0;
int deny = 0;
int abstain = 0;
@@ -86,7 +83,7 @@ public class UnanimousBased extends AbstractAccessDecisionManager {
while (voters.hasNext()) {
AccessDecisionVoter voter = (AccessDecisionVoter) voters.next();
- int result = voter.vote(authentication, invocation, thisDef);
+ int result = voter.vote(authentication, object, thisDef);
switch (result) {
case AccessDecisionVoter.ACCESS_GRANTED: