Pārlūkot izejas kodu

Fix getConfigurersInInitializing Semantics

A getter should not mutate state. This removes getConfigurersInInitializing
in favor of inline code since this is just used once.

Issue gh-17020 gh-17011

Signed-off-by: Rob Winch <362503+rwinch@users.noreply.github.com>
Rob Winch 1 mēnesi atpakaļ
vecāks
revīzija
fca704e61f

+ 4 - 8
config/src/main/java/org/springframework/security/config/annotation/AbstractConfiguredSecurityBuilder.java

@@ -60,7 +60,7 @@ public abstract class AbstractConfiguredSecurityBuilder<O, B extends SecurityBui
 
 	private final LinkedHashMap<Class<? extends SecurityConfigurer<O, B>>, List<SecurityConfigurer<O, B>>> configurers = new LinkedHashMap<>();
 
-	private final List<SecurityConfigurer<O, B>> configurersAddedInInitializing = new ArrayList<>();
+	private List<SecurityConfigurer<O, B>> configurersAddedInInitializing = new ArrayList<>();
 
 	private final Map<Class<?>, Object> sharedObjects = new HashMap<>();
 
@@ -388,7 +388,9 @@ public abstract class AbstractConfiguredSecurityBuilder<O, B extends SecurityBui
 			configurer.init((B) this);
 		}
 		while (!this.configurersAddedInInitializing.isEmpty()) {
-			for (SecurityConfigurer<O, B> configurer : getConfigurersInInitializing()) {
+			List<SecurityConfigurer<O, B>> toInit = this.configurersAddedInInitializing;
+			this.configurersAddedInInitializing = new ArrayList<>();
+			for (SecurityConfigurer<O, B> configurer : toInit) {
 				configurer.init((B) this);
 			}
 		}
@@ -410,12 +412,6 @@ public abstract class AbstractConfiguredSecurityBuilder<O, B extends SecurityBui
 		return result;
 	}
 
-	private List<SecurityConfigurer<O, B>> getConfigurersInInitializing() {
-		List<SecurityConfigurer<O, B>> result = new ArrayList<>(this.configurersAddedInInitializing);
-		this.configurersAddedInInitializing.clear();
-		return result;
-	}
-
 	/**
 	 * Determines if the object is unbuilt.
 	 * @return true, if unbuilt else false