|  | @@ -67,6 +67,9 @@ import org.springframework.web.server.WebFilter;
 | 
	
		
			
				|  |  |  import org.springframework.web.server.WebFilterChain;
 | 
	
		
			
				|  |  |  import reactor.core.publisher.Mono;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.io.IOException;
 | 
	
		
			
				|  |  | +import java.io.PrintWriter;
 | 
	
		
			
				|  |  | +import java.io.StringWriter;
 | 
	
		
			
				|  |  |  import java.time.Duration;
 | 
	
		
			
				|  |  |  import java.util.ArrayList;
 | 
	
		
			
				|  |  |  import java.util.Arrays;
 | 
	
	
		
			
				|  | @@ -102,6 +105,8 @@ public class ServerHttpSecurity {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private List<WebFilter> webFilters = new ArrayList<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	private Throwable built;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * The ServerExchangeMatcher that determines which requests apply to this HttpSecurity instance.
 | 
	
		
			
				|  |  |  	 *
 | 
	
	
		
			
				|  | @@ -174,6 +179,10 @@ public class ServerHttpSecurity {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	public SecurityWebFilterChain build() {
 | 
	
		
			
				|  |  | +		if(this.built != null) {
 | 
	
		
			
				|  |  | +			throw new IllegalStateException("This has already been built with the following stacktrace. " + buildToString());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		this.built = new RuntimeException("First Build Invocation").fillInStackTrace();
 | 
	
		
			
				|  |  |  		if(this.headers != null) {
 | 
	
		
			
				|  |  |  			this.headers.configure(this);
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -216,6 +225,21 @@ public class ServerHttpSecurity {
 | 
	
		
			
				|  |  |  		return new MatcherSecurityWebFilterChain(getSecurityMatcher(), this.webFilters);
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	private String buildToString() {
 | 
	
		
			
				|  |  | +		try(StringWriter writer = new StringWriter()) {
 | 
	
		
			
				|  |  | +			try(PrintWriter printer = new PrintWriter(writer)) {
 | 
	
		
			
				|  |  | +				printer.println();
 | 
	
		
			
				|  |  | +				printer.println();
 | 
	
		
			
				|  |  | +				this.built.printStackTrace(printer);
 | 
	
		
			
				|  |  | +				printer.println();
 | 
	
		
			
				|  |  | +				printer.println();
 | 
	
		
			
				|  |  | +				return writer.toString();
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} catch(IOException e) {
 | 
	
		
			
				|  |  | +			throw new RuntimeException(e);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	private ServerAuthenticationEntryPoint getServerAuthenticationEntryPoint() {
 | 
	
		
			
				|  |  |  		if(this.serverAuthenticationEntryPoint != null || this.defaultEntryPoints.isEmpty()) {
 | 
	
		
			
				|  |  |  			return this.serverAuthenticationEntryPoint;
 |