From 895f0d108cbc3dc9ab008c546af0717b283ef38f Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Tue, 29 Aug 2017 22:26:56 -0500 Subject: [PATCH] Run PasswordEncoder on Schedulers.parallel() --- .../UserDetailsRepositoryAuthenticationManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/springframework/security/authentication/UserDetailsRepositoryAuthenticationManager.java b/core/src/main/java/org/springframework/security/authentication/UserDetailsRepositoryAuthenticationManager.java index 38a6000c4c..7d28726bc4 100644 --- a/core/src/main/java/org/springframework/security/authentication/UserDetailsRepositoryAuthenticationManager.java +++ b/core/src/main/java/org/springframework/security/authentication/UserDetailsRepositoryAuthenticationManager.java @@ -21,11 +21,13 @@ package org.springframework.security.authentication; import org.springframework.security.authentication.encoding.PlaintextPasswordEncoder; import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsRepository; import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.util.Assert; import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; /** * @author Rob Winch @@ -44,8 +46,8 @@ public class UserDetailsRepositoryAuthenticationManager implements ReactiveAuthe @Override public Mono authenticate(Authentication authentication) { final String username = authentication.getName(); - return repository - .findByUsername(username) + return this.repository.findByUsername(username) + .publishOn(Schedulers.parallel()) .filter( u -> this.passwordEncoder.matches((String) authentication.getCredentials(), u.getPassword())) .switchIfEmpty( Mono.error(new BadCredentialsException("Invalid Credentials")) ) .map( u -> new UsernamePasswordAuthenticationToken(u, u.getPassword(), u.getAuthorities()) );