[英]Spring Security, Problem with PasswordEncoder
我的PasswordEncoder有問題,
我的代碼:
@Service
public class UserService {
private static final String DEFAULT_ROLE = "ROLE_USER";
private UserRepository userRepository;
private UserRoleRepository roleRepository;
public PasswordEncoder passwordEncoder;
@Autowired
public UserService(PasswordEncoder passwordEncoder){
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setUserRepository(UserRepository userRepository){
this.userRepository = userRepository;
}
@Autowired
public void setUserRoleRepository(UserRoleRepository roleRepository){
this.roleRepository = roleRepository;
}
public void addWithDefaultRole(User user){
UserRole defaultRole = roleRepository.findByRole(DEFAULT_ROLE);
user.getRoles().add(defaultRole);
String passwordHash = passwordEncoder.encode(user.getPassword());
user.setPassword(passwordHash);
userRepository.save(user);
}
}
錯誤:
申請開始失敗
描述:
org.spring.service.UserService中的構造函數的參數0需要找不到類型為“ org.springframework.security.crypto.password.PasswordEncoder”的bean。
行動:
考慮在配置中定義類型為“ org.springframework.security.crypto.password.PasswordEncoder”的bean。
流程以退出代碼1完成
我不知道該如何解決。
為了使依賴項注入正常工作,您需要先聲明一個適當類型的bean,否則就沒有任何注入。 正是這樣告訴您例外情況。
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); // or any other password encoder
}
嘗試這種方式(兩個bean之一,而不是兩個):
@Configuration
@EnableWebSecurity
public class WebSecurityConfigAuthentication extends WebSecurityConfigurerAdapter {
// For BCrypt Encoded password
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
OR
// For no Encoder, plain text password
@Bean
public static NoOpPasswordEncoder passwordEncoder() {
return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.