| 
					
				 | 
			
			
				@@ -22,6 +22,7 @@ This also gives a good idea of the high level flow of authentication and how pie 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 At the heart of Spring Security's authentication model is the `SecurityContextHolder`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 It contains the <<servlet-authentication-securitycontext>>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[.invert-dark] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 image::{figures}/securitycontextholder.png[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The `SecurityContextHolder` is where Spring Security stores the details of who is xref:features/authentication/index.adoc#authentication[authenticated]. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -175,6 +176,7 @@ While the implementation of `AuthenticationManager` could be anything, the most 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Each `AuthenticationProvider` has an opportunity to indicate that authentication should be successful, fail, or indicate it cannot make a decision and allow a downstream `AuthenticationProvider` to decide. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 If none of the configured `AuthenticationProvider` instances can authenticate, authentication fails with a `ProviderNotFoundException`, which is a special `AuthenticationException` that indicates that the `ProviderManager` was not configured to support the type of `Authentication` that was passed into it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[.invert-dark] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 image::{figures}/providermanager.png[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 In practice each `AuthenticationProvider` knows how to perform a specific type of authentication. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -184,11 +186,13 @@ This lets each `AuthenticationProvider` do a very specific type of authenticatio 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 `ProviderManager` also allows configuring an optional parent `AuthenticationManager`, which is consulted in the event that no `AuthenticationProvider` can perform authentication. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The parent can be any type of `AuthenticationManager`, but it is often an instance of `ProviderManager`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[.invert-dark] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 image::{figures}/providermanager-parent.png[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 In fact, multiple `ProviderManager` instances might share the same parent `AuthenticationManager`. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 This is somewhat common in scenarios where there are multiple xref:servlet/architecture.adoc#servlet-securityfilterchain[`SecurityFilterChain`] instances that have some authentication in common (the shared parent `AuthenticationManager`), but also different authentication mechanisms (the different `ProviderManager` instances). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[.invert-dark] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 image::{figures}/providermanagers-parent.png[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 [[servlet-authentication-providermanager-erasing-credentials]] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -234,6 +238,7 @@ Before the credentials can be authenticated, Spring Security typically requests 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Next, the `AbstractAuthenticationProcessingFilter` can authenticate any authentication requests that are submitted to it. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[.invert-dark] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 image::{figures}/abstractauthenticationprocessingfilter.png[] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 image:{icondir}/number_1.png[] When the user submits their credentials, the `AbstractAuthenticationProcessingFilter` creates an <<servlet-authentication-authentication,`Authentication`>> from the `HttpServletRequest` to be authenticated. 
			 |