| 
					
				 | 
			
			
				@@ -18,6 +18,7 @@ package org.springframework.security.authentication; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.logging.Log; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.logging.LogFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.beans.factory.DisposableBean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import reactor.core.publisher.Mono; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import reactor.core.scheduler.Scheduler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import reactor.core.scheduler.Schedulers; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,7 +46,7 @@ import org.springframework.util.Assert; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @author Eddú Meléndez 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  * @since 5.2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-public abstract class AbstractUserDetailsReactiveAuthenticationManager implements ReactiveAuthenticationManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+public abstract class AbstractUserDetailsReactiveAuthenticationManager implements ReactiveAuthenticationManager, DisposableBean { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	protected final Log logger = LogFactory.getLog(getClass()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -55,7 +56,8 @@ public abstract class AbstractUserDetailsReactiveAuthenticationManager implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private ReactiveUserDetailsPasswordService userDetailsPasswordService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	private Scheduler scheduler = Schedulers.newParallel("password-encoder"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Scheduler scheduler = Schedulers.newParallel("password-encoder"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	private boolean defaultScheduler = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	private UserDetailsChecker preAuthenticationChecks = user -> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (!user.isAccountNonLocked()) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -138,6 +140,10 @@ public abstract class AbstractUserDetailsReactiveAuthenticationManager implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void setScheduler(Scheduler scheduler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Assert.notNull(scheduler, "scheduler cannot be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (this.defaultScheduler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.defaultScheduler = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.scheduler.dispose(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.scheduler = scheduler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -171,4 +177,10 @@ public abstract class AbstractUserDetailsReactiveAuthenticationManager implement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	protected abstract Mono<UserDetails> retrieveUser(String username); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void destroy() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (this.defaultScheduler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.scheduler.dispose(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |