diff --git a/core/src/main/java/org/springframework/security/intercept/AbstractSecurityInterceptor.java b/core/src/main/java/org/springframework/security/intercept/AbstractSecurityInterceptor.java
index 83a986d552..5a94339b7a 100644
--- a/core/src/main/java/org/springframework/security/intercept/AbstractSecurityInterceptor.java
+++ b/core/src/main/java/org/springframework/security/intercept/AbstractSecurityInterceptor.java
@@ -52,6 +52,7 @@ import org.springframework.util.Assert;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.util.Collection;
/**
* Abstract class that implements security interception for secure objects.
@@ -212,14 +213,15 @@ public abstract class AbstractSecurityInterceptor implements InitializingBean, A
}
if (this.validateConfigAttributes) {
- Iterator iter = this.obtainObjectDefinitionSource().getConfigAttributeDefinitions();
+ Collection attributeDefs = this.obtainObjectDefinitionSource().getConfigAttributeDefinitions();
- if (iter == null) {
+ if (attributeDefs == null) {
logger.warn("Could not validate configuration attributes as the ObjectDefinitionSource did not return "
+ "a ConfigAttributeDefinition Iterator");
return;
}
+ Iterator iter = attributeDefs.iterator();
Set unsupportedAttrs = new HashSet();
while (iter.hasNext()) {
diff --git a/core/src/main/java/org/springframework/security/intercept/ObjectDefinitionSource.java b/core/src/main/java/org/springframework/security/intercept/ObjectDefinitionSource.java
index 04509fd9db..69da2c365c 100644
--- a/core/src/main/java/org/springframework/security/intercept/ObjectDefinitionSource.java
+++ b/core/src/main/java/org/springframework/security/intercept/ObjectDefinitionSource.java
@@ -18,6 +18,7 @@ package org.springframework.security.intercept;
import org.springframework.security.ConfigAttributeDefinition;
import java.util.Iterator;
+import java.util.Collection;
/**
@@ -42,17 +43,17 @@ public interface ObjectDefinitionSource {
* @throws IllegalArgumentException if the passed object is not of a type supported by the
* ObjectDefinitionSource implementation
*/
- ConfigAttributeDefinition getAttributes(Object object)
- throws IllegalArgumentException;
+ ConfigAttributeDefinition getAttributes(Object object) throws IllegalArgumentException;
/**
- * If available, all of the ConfigAttributeDefinitions defined by the implementing class.
This
- * is used by the {@link AbstractSecurityInterceptor} to perform startup time validation of each
- * ConfigAttribute configured against it.
ConfigAttributeDefinitions defined by the implementing class.
+ *
+ * This is used by the {@link AbstractSecurityInterceptor} to perform startup time validation of each
+ * ConfigAttribute configured against it.
*
- * @return an iterator over all the ConfigAttributeDefinitions or null if unsupported
+ * @return the ConfigAttributeDefinitions or null if unsupported
*/
- Iterator getConfigAttributeDefinitions();
+ Collection getConfigAttributeDefinitions();
/**
* Indicates whether the ObjectDefinitionSource implementation is able to provide
diff --git a/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionAttributes.java b/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionAttributes.java
index ea549601c9..a01dcc6926 100644
--- a/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionAttributes.java
+++ b/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionAttributes.java
@@ -103,7 +103,7 @@ public class MethodDefinitionAttributes extends AbstractMethodDefinitionSource {
}
}
- public Iterator getConfigAttributeDefinitions() {
+ public Collection getConfigAttributeDefinitions() {
return null;
}
diff --git a/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionMap.java b/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionMap.java
index 946fdca28c..2ae835843d 100644
--- a/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionMap.java
+++ b/core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionMap.java
@@ -16,7 +16,6 @@
package org.springframework.security.intercept.method;
import org.springframework.security.ConfigAttributeDefinition;
-import org.springframework.security.SecurityConfig;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -28,6 +27,8 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Collection;
+import java.util.Collections;
/**
@@ -177,8 +178,8 @@ public class MethodDefinitionMap extends AbstractMethodDefinitionSource {
*
* @return the attributes explicitly defined against this bean
*/
- public Iterator getConfigAttributeDefinitions() {
- return methodMap.values().iterator();
+ public Collection getConfigAttributeDefinitions() {
+ return Collections.unmodifiableCollection(methodMap.values());
}
/**
diff --git a/core/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationDefinitionSource.java b/core/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationDefinitionSource.java
index ebc1445706..1ebb28b166 100644
--- a/core/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationDefinitionSource.java
+++ b/core/src/main/java/org/springframework/security/intercept/web/DefaultFilterInvocationDefinitionSource.java
@@ -16,7 +16,6 @@
package org.springframework.security.intercept.web;
import org.springframework.security.ConfigAttributeDefinition;
-import org.springframework.security.SecurityConfig;
import org.springframework.security.util.UrlMatcher;
import org.apache.commons.logging.Log;
@@ -29,7 +28,8 @@ import java.util.HashMap;
import java.util.Set;
import java.util.HashSet;
import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
+import java.util.Collections;
/**
@@ -136,8 +136,8 @@ public class DefaultFilterInvocationDefinitionSource implements FilterInvocation
return methodRequestmap;
}
- public Iterator getConfigAttributeDefinitions() {
- return getRequestMap().values().iterator();
+ public Collection getConfigAttributeDefinitions() {
+ return Collections.unmodifiableCollection(getRequestMap().values());
}
public ConfigAttributeDefinition getAttributes(Object object) throws IllegalArgumentException {
diff --git a/core/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java b/core/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java
index b3656ad5bc..d6c099df49 100644
--- a/core/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java
+++ b/core/src/main/java/org/springframework/security/securechannel/ChannelProcessingFilter.java
@@ -35,6 +35,7 @@ import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
+import java.util.Collection;
/**
@@ -66,9 +67,9 @@ public class ChannelProcessingFilter extends SpringSecurityFilter implements Ini
Assert.notNull(filterInvocationDefinitionSource, "filterInvocationDefinitionSource must be specified");
Assert.notNull(channelDecisionManager, "channelDecisionManager must be specified");
- Iterator iter = this.filterInvocationDefinitionSource.getConfigAttributeDefinitions();
+ Collection attrDefs = this.filterInvocationDefinitionSource.getConfigAttributeDefinitions();
- if (iter == null) {
+ if (attrDefs == null) {
if (logger.isWarnEnabled()) {
logger.warn("Could not validate configuration attributes as the FilterInvocationDefinitionSource did "
+ "not return a ConfigAttributeDefinition Iterator");
@@ -77,6 +78,7 @@ public class ChannelProcessingFilter extends SpringSecurityFilter implements Ini
return;
}
+ Iterator iter = attrDefs.iterator();
Set set = new HashSet();
while (iter.hasNext()) {
diff --git a/core/src/test/java/org/springframework/security/intercept/method/MethodDefinitionSourceEditorTests.java b/core/src/test/java/org/springframework/security/intercept/method/MethodDefinitionSourceEditorTests.java
index 6f19a29a8b..39521ec375 100644
--- a/core/src/test/java/org/springframework/security/intercept/method/MethodDefinitionSourceEditorTests.java
+++ b/core/src/test/java/org/springframework/security/intercept/method/MethodDefinitionSourceEditorTests.java
@@ -137,7 +137,7 @@ public class MethodDefinitionSourceEditorTests extends TestCase {
"org.springframework.security.TargetObject.countLength=ROLE_ONE,ROLE_TWO,RUN_AS_ENTRY\r\norg.springframework.security.TargetObject.make*=ROLE_NINE,ROLE_SUPERVISOR");
MethodDefinitionMap map = (MethodDefinitionMap) editor.getValue();
- Iterator iter = map.getConfigAttributeDefinitions();
+ Iterator iter = map.getConfigAttributeDefinitions().iterator();
int counter = 0;
while (iter.hasNext()) {
diff --git a/core/src/test/java/org/springframework/security/intercept/method/MockMethodDefinitionSource.java b/core/src/test/java/org/springframework/security/intercept/method/MockMethodDefinitionSource.java
index 31733dc4d4..21491b8e0f 100644
--- a/core/src/test/java/org/springframework/security/intercept/method/MockMethodDefinitionSource.java
+++ b/core/src/test/java/org/springframework/security/intercept/method/MockMethodDefinitionSource.java
@@ -16,13 +16,12 @@
package org.springframework.security.intercept.method;
import org.springframework.security.ConfigAttributeDefinition;
-import org.springframework.security.SecurityConfig;
import java.lang.reflect.Method;
-import java.util.Iterator;
import java.util.List;
import java.util.Vector;
+import java.util.Collection;
/**
@@ -34,12 +33,12 @@ public class MockMethodDefinitionSource extends AbstractMethodDefinitionSource {
//~ Instance fields ================================================================================================
private List list;
- private boolean returnAnIterator;
+ private boolean returnACollection;
//~ Constructors ===================================================================================================
- public MockMethodDefinitionSource(boolean includeInvalidAttributes, boolean returnAnIteratorWhenRequested) {
- returnAnIterator = returnAnIteratorWhenRequested;
+ public MockMethodDefinitionSource(boolean includeInvalidAttributes, boolean returnACollectionWhenRequested) {
+ returnACollection = returnACollectionWhenRequested;
list = new Vector();
ConfigAttributeDefinition def1 = new ConfigAttributeDefinition("MOCK_LOWER");
@@ -61,9 +60,9 @@ public class MockMethodDefinitionSource extends AbstractMethodDefinitionSource {
//~ Methods ========================================================================================================
- public Iterator getConfigAttributeDefinitions() {
- if (returnAnIterator) {
- return list.iterator();
+ public Collection getConfigAttributeDefinitions() {
+ if (returnACollection) {
+ return list;
} else {
return null;
}
diff --git a/core/src/test/java/org/springframework/security/intercept/method/aopalliance/MethodSecurityInterceptorTests.java b/core/src/test/java/org/springframework/security/intercept/method/aopalliance/MethodSecurityInterceptorTests.java
index 465f95338e..287596ee3a 100644
--- a/core/src/test/java/org/springframework/security/intercept/method/aopalliance/MethodSecurityInterceptorTests.java
+++ b/core/src/test/java/org/springframework/security/intercept/method/aopalliance/MethodSecurityInterceptorTests.java
@@ -48,7 +48,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.lang.reflect.Method;
-import java.util.Iterator;
+import java.util.Collection;
/**
@@ -447,7 +447,7 @@ public class MethodSecurityInterceptorTests extends TestCase {
}
private class MockObjectDefinitionSourceWhichOnlySupportsStrings extends AbstractMethodDefinitionSource {
- public Iterator getConfigAttributeDefinitions() {
+ public Collection getConfigAttributeDefinitions() {
return null;
}
diff --git a/core/src/test/java/org/springframework/security/intercept/web/FilterInvocationDefinitionSourceEditorTests.java b/core/src/test/java/org/springframework/security/intercept/web/FilterInvocationDefinitionSourceEditorTests.java
index 3ceea68ce4..13f50bbe93 100644
--- a/core/src/test/java/org/springframework/security/intercept/web/FilterInvocationDefinitionSourceEditorTests.java
+++ b/core/src/test/java/org/springframework/security/intercept/web/FilterInvocationDefinitionSourceEditorTests.java
@@ -145,7 +145,7 @@ public class FilterInvocationDefinitionSourceEditorTests extends TestCase {
editor.setAsText("\\A/secure/super.*\\Z=ROLE_WE_DONT_HAVE\r\n\\A/secure/.*\\Z=ROLE_SUPERVISOR,ROLE_TELLER");
DefaultFilterInvocationDefinitionSource map = (DefaultFilterInvocationDefinitionSource) editor.getValue();
- Iterator iter = map.getConfigAttributeDefinitions();
+ Iterator iter = map.getConfigAttributeDefinitions().iterator();
int counter = 0;
while (iter.hasNext()) {
diff --git a/core/src/test/java/org/springframework/security/intercept/web/FilterSecurityInterceptorTests.java b/core/src/test/java/org/springframework/security/intercept/web/FilterSecurityInterceptorTests.java
index 8ba32db8f1..e237d296ed 100644
--- a/core/src/test/java/org/springframework/security/intercept/web/FilterSecurityInterceptorTests.java
+++ b/core/src/test/java/org/springframework/security/intercept/web/FilterSecurityInterceptorTests.java
@@ -29,7 +29,6 @@ import org.springframework.security.MockApplicationContext;
import org.springframework.security.MockAuthenticationManager;
import org.springframework.security.MockRunAsManager;
import org.springframework.security.RunAsManager;
-import org.springframework.security.SecurityConfig;
import org.springframework.security.util.AntUrlPathMatcher;
import org.springframework.security.util.RegexUrlPathMatcher;
import org.springframework.security.context.SecurityContextHolder;
@@ -39,10 +38,7 @@ import org.springframework.mock.web.MockHttpServletResponse;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.LinkedHashMap;
+import java.util.Collection;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@@ -281,7 +277,7 @@ public class FilterSecurityInterceptorTests extends TestCase {
}
}
- public Iterator getConfigAttributeDefinitions() {
+ public Collection getConfigAttributeDefinitions() {
return null;
}
diff --git a/core/src/test/java/org/springframework/security/intercept/web/MockFilterInvocationDefinitionSource.java b/core/src/test/java/org/springframework/security/intercept/web/MockFilterInvocationDefinitionSource.java
index ceecd8e9a7..2ee4c9b810 100644
--- a/core/src/test/java/org/springframework/security/intercept/web/MockFilterInvocationDefinitionSource.java
+++ b/core/src/test/java/org/springframework/security/intercept/web/MockFilterInvocationDefinitionSource.java
@@ -16,12 +16,11 @@
package org.springframework.security.intercept.web;
import org.springframework.security.ConfigAttributeDefinition;
-import org.springframework.security.SecurityConfig;
import org.springframework.security.util.AntUrlPathMatcher;
-import java.util.Iterator;
import java.util.List;
import java.util.Vector;
+import java.util.Collection;
/**
@@ -62,9 +61,9 @@ public class MockFilterInvocationDefinitionSource extends DefaultFilterInvocatio
//~ Methods ========================================================================================================
- public Iterator getConfigAttributeDefinitions() {
+ public Collection getConfigAttributeDefinitions() {
if (returnAnIterator) {
- return list.iterator();
+ return list;
} else {
return null;
}
diff --git a/core/src/test/java/org/springframework/security/securechannel/ChannelProcessingFilterTests.java b/core/src/test/java/org/springframework/security/securechannel/ChannelProcessingFilterTests.java
index 2e240d20c6..8b8472459a 100644
--- a/core/src/test/java/org/springframework/security/securechannel/ChannelProcessingFilterTests.java
+++ b/core/src/test/java/org/springframework/security/securechannel/ChannelProcessingFilterTests.java
@@ -19,7 +19,6 @@ import junit.framework.TestCase;
import org.springframework.security.ConfigAttribute;
import org.springframework.security.ConfigAttributeDefinition;
-import org.springframework.security.SecurityConfig;
import org.springframework.security.intercept.web.FilterInvocation;
import org.springframework.security.intercept.web.FilterInvocationDefinitionSource;
@@ -29,9 +28,9 @@ import org.springframework.mock.web.MockHttpServletResponse;
import java.io.IOException;
-import java.util.Iterator;
import java.util.List;
import java.util.Vector;
+import java.util.Collection;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
@@ -91,8 +90,7 @@ public class ChannelProcessingFilterTests extends TestCase {
assertTrue(true);
}
- public void testDetectsUnsupportedConfigAttribute()
- throws Exception {
+ public void testDetectsUnsupportedConfigAttribute() throws Exception {
ChannelProcessingFilter filter = new ChannelProcessingFilter();
filter.setChannelDecisionManager(new MockChannelDecisionManager(false, "SUPPORTS_MOCK_ONLY"));
@@ -109,8 +107,7 @@ public class ChannelProcessingFilterTests extends TestCase {
}
}
- public void testDoFilterWhenManagerDoesCommitResponse()
- throws Exception {
+ public void testDoFilterWhenManagerDoesCommitResponse() throws Exception {
ChannelProcessingFilter filter = new ChannelProcessingFilter();
filter.setChannelDecisionManager(new MockChannelDecisionManager(true, "SOME_ATTRIBUTE"));
@@ -131,8 +128,7 @@ public class ChannelProcessingFilterTests extends TestCase {
assertTrue(true);
}
- public void testDoFilterWhenManagerDoesNotCommitResponse()
- throws Exception {
+ public void testDoFilterWhenManagerDoesNotCommitResponse() throws Exception {
ChannelProcessingFilter filter = new ChannelProcessingFilter();
filter.setChannelDecisionManager(new MockChannelDecisionManager(false, "SOME_ATTRIBUTE"));
@@ -175,8 +171,7 @@ public class ChannelProcessingFilterTests extends TestCase {
assertTrue(true);
}
- public void testDoFilterWithNonHttpServletRequestDetected()
- throws Exception {
+ public void testDoFilterWithNonHttpServletRequestDetected() throws Exception {
ChannelProcessingFilter filter = new ChannelProcessingFilter();
try {
@@ -186,8 +181,7 @@ public class ChannelProcessingFilterTests extends TestCase {
}
}
- public void testDoFilterWithNonHttpServletResponseDetected()
- throws Exception {
+ public void testDoFilterWithNonHttpServletResponseDetected() throws Exception {
ChannelProcessingFilter filter = new ChannelProcessingFilter();
try {
@@ -293,7 +287,7 @@ public class ChannelProcessingFilterTests extends TestCase {
}
}
- public Iterator getConfigAttributeDefinitions() {
+ public Collection getConfigAttributeDefinitions() {
if (!provideIterator) {
return null;
}
@@ -301,7 +295,7 @@ public class ChannelProcessingFilterTests extends TestCase {
List list = new Vector();
list.add(toReturn);
- return list.iterator();
+ return list;
}
public boolean supports(Class clazz) {