UserDetailService

UserDetailsService is used by DaoAuthenticationProvider for retrieving a username, a password, and other attributes for authenticating with a username and password

Pour assurer l'authentification il faut que notre classe RegisterCustomerServiceImpl implémente en plus l'interface UserDetailsService. Cela va également impliqué de redéfinir et d'ajouter la méthode loadUserByUsername().

Note
Dans notre cas le critère d'uniticité est l'adresse email

public interface RegisterCustomerService extends UserDetailsService {
	void register(RegisterCustomerRequestModel dto) throws ...;

	void update(RegisterCustomerRequestModel dto, Long id) throws ...;
}

@Service
public class RegisterCustomerServiceImpl implements RegisterCustomerService {

	...

	@Override
	public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
        // Récupération de l'utilisateur en BDD
		Customer customer = customerRegisterGateway.findByEmail(email);

		// Conversion d'un customer en UserDetail
		User user = new User(customer.getEmail(), customer.getPassword(),
				Collections.singletonList(new SimpleGrantedAuthority(customer.getRole().name())));

		return user;
	}
}

1- Nous allons récupérer l'utilisateur en base de données en fonction de son adresse mail 2- Puis convertir l'objet Customer retourné en un UserDetail qui est la représentation d'un utilisateur en Spring Security