Salut les gars ma version springboot est « 2.2.4.RELEASE ».
Je veux autowire 2 paramètres dans le constructeur. mais il ne ne fonctionne pas.
Mabye je pense que 'passwordEncoder' a un problème ...
voici le code 'UserService.java'.
import kr.co.loosie.foody.domain.User;
import kr.co.loosie.foody.domain.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Optional;
@Service
@Transactional
public class UserService {
private UserRepository userRepository;
private PasswordEncoder passwordEncoder;
@Autowired
public UserService(UserRepository userRepository,
PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
public User registerUser(String email, String name, String password) {
Optional<User> existed = userRepository.findByEmail(email);
if (existed.isPresent()) {
throw new EmailExistedException(email);
}
String encodedPassword = passwordEncoder.encode(password);
User user = User.builder()
.email(email)
.name(name)
.password(encodedPassword)
.level(1L)
.build();
return userRepository.save(user);
}
public User authenticate(String email, String password) {
User user = userRepository.findByEmail(email)
.orElseThrow(() -> new EmailNotExistedException(email));
if (!passwordEncoder.matches(password, user.getPassword())) {
throw new PasswordWrongException();
}
return user;
}
}
la partie d'erreur est ici.
@Autowired
UserService publique (UserRepository userRepository,
PasswordEncoder passwordEncoder) {
this.userRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
il a travaillé quand je ne UserReposiotory pour obtenir autowired
mais je mets la PasswordEncoder passwordEncoder ligne, ce n'est pas travaillé. plz me donner un peu d' aide!
c'est un message d'avertissement
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with
name 'userService' defined in file [D:\CCC\intellij_ex\foody\foody-customer-
api\build\classes\java\main\kr\co\loosie\foody\application\UserService.class]: Unsatisfied dependency
expressed through constructor parameter 1; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
'org.springframework.security.crypto.password.PasswordEncoder' available: expected at least 1 bean
which qualifies as autowire candidate. Dependency annotations: {}
plz me donner un peu d'aide!
Message d' erreur indique qu'il n'y a pas de haricots pour org.springframework.security.crypto.password.PasswordEncoder
, ce qui signifie que vous n'avez pas défini nulle part.
Vous auriez besoin de quelque chose comme:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
Dans votre configuration (si la configuration par Java)