Handles configuration of a bean context
- * defined list of {@link AfterInvocationProvider}s.
- *
Every AfterInvocationProvider will be polled when the {@link #decide(Authentication, Object,
+ * Provider-based implementation of {@link AfterInvocationManager}.
+ *
+ * Handles configuration of a bean context defined list of {@link AfterInvocationProvider}s.
+ *
+ * Every AfterInvocationProvider will be polled when the {@link #decide(Authentication, Object,
* List, Object)} method is called. The Object returned from each provider will be
* presented to the successive provider for processing. This means each provider must ensure they return the
* Object, even if they are not interested in the "after invocation" decision (perhaps as the secure
- * object invocation did not include a configuration attribute a given provider is configured to respond to).
+ * object invocation did not include a configuration attribute a given provider is configured to respond to).
*
* @author Ben Alex
* @version $Id$
@@ -48,7 +49,7 @@ public class AfterInvocationProviderManager implements AfterInvocationManager, I
//~ Instance fields ================================================================================================
- private List providers;
+ private List providers;
//~ Methods ========================================================================================================
@@ -56,51 +57,41 @@ public class AfterInvocationProviderManager implements AfterInvocationManager, I
checkIfValidList(this.providers);
}
- private void checkIfValidList(List listToCheck) {
+ private void checkIfValidList(List> listToCheck) {
if ((listToCheck == null) || (listToCheck.size() == 0)) {
throw new IllegalArgumentException("A list of AfterInvocationProviders is required");
}
}
public Object decide(Authentication authentication, Object object, List config,
- Object returnedObject) throws AccessDeniedException {
- Iterator iter = this.providers.iterator();
+ Object returnedObject) throws AccessDeniedException {
Object result = returnedObject;
- while (iter.hasNext()) {
- AfterInvocationProvider provider = (AfterInvocationProvider) iter.next();
+ for(AfterInvocationProvider provider : providers) {
result = provider.decide(authentication, object, config, result);
}
return result;
}
- public List getProviders() {
+ public List getProviders() {
return this.providers;
}
- public void setProviders(List newList) {
+ public void setProviders(List> newList) {
checkIfValidList(newList);
+ providers = new ArrayList(newList.size());
- Iterator iter = newList.iterator();
-
- while (iter.hasNext()) {
- Object currentObject = iter.next();
-
+ for(Object currentObject : newList) {
Assert.isInstanceOf(AfterInvocationProvider.class, currentObject, "AfterInvocationProvider " +
currentObject.getClass().getName() + " must implement AfterInvocationProvider");
+ providers.add((AfterInvocationProvider) currentObject);
}
-
- this.providers = newList;
}
public boolean supports(ConfigAttribute attribute) {
- Iterator iter = this.providers.iterator();
-
- while (iter.hasNext()) {
- AfterInvocationProvider provider = (AfterInvocationProvider) iter.next();
-
+ for(AfterInvocationProvider provider : providers) {
if (logger.isDebugEnabled()) {
logger.debug("Evaluating " + attribute + " against " + provider);
}
@@ -115,7 +106,9 @@ public class AfterInvocationProviderManager implements AfterInvocationManager, I
/**
* Iterates through all AfterInvocationProviders and ensures each can support the presented
- * class.
If one or more providers cannot support the presented class, false is returned.
+ * class.
+ *
+ * If one or more providers cannot support the presented class, false is returned.
*
* @param clazz the secure object class being queries
*
@@ -123,11 +116,7 @@ public class AfterInvocationProviderManager implements AfterInvocationManager, I
* every one of its AfterInvocationProviders to support the secure object class
*/
public boolean supports(Class> clazz) {
- Iterator iter = this.providers.iterator();
-
- while (iter.hasNext()) {
- AfterInvocationProvider provider = (AfterInvocationProvider) iter.next();
-
+ for (AfterInvocationProvider provider : providers) {
if (!provider.supports(clazz)) {
return false;
}
diff --git a/core/src/main/java/org/springframework/security/afterinvocation/ArrayFilterer.java b/core/src/main/java/org/springframework/security/afterinvocation/ArrayFilterer.java
index 928d53184d..94972141d2 100644
--- a/core/src/main/java/org/springframework/security/afterinvocation/ArrayFilterer.java
+++ b/core/src/main/java/org/springframework/security/afterinvocation/ArrayFilterer.java
@@ -40,7 +40,7 @@ class ArrayFilterer implements Filterer {
//~ Instance fields ================================================================================================
- private Set removeList;
+ private Set