|  | @@ -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();
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  |  }
 |