Java 创建名为';注册控制器';:通过字段'表示未满足的依赖关系;密码编码器';;
这是编译过程中出现的错误: 创建名为“registrationController”的bean时出错:通过字段“passwordEncoder”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.UnsatifiedDependencyException:创建名为“webSecurityConfig”的bean时出错:通过字段“userDetailsService”表示的未满足的依赖关系 我假设在注册为私人UserRepo UserRepo时;找不到bin。我不知道可能出现什么错误。请帮助我找出出现此错误的原因 注册控制器Java 创建名为';注册控制器';:通过字段'表示未满足的依赖关系;密码编码器';;,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,这是编译过程中出现的错误: 创建名为“registrationController”的bean时出错:通过字段“passwordEncoder”表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.UnsatifiedDependencyException:创建名为“webSecurityConfig”的bean时出错:通过字段“userDetailsService”表示的未满足的依赖关系 我假设在注册为私人UserRepo UserRepo时;找
@Controller
@RequestMapping("/registration")
public class RegistrationController {
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private UserRepo userRepo;
@GetMapping
public String registration(){
return "registration";
}
@PostMapping
public String processRegistration(RegistrationForm registrationForm){
userRepo.save(registrationForm.toUser(passwordEncoder));
return "redirect:/login";
}
}
网络安全配置
@Configuration
@启用Web安全性
公共类WebSecurityConfig扩展了WebSecurityConfigureAdapter{
@Autowired
private UserDetailsService userDetailsService;
// шифрование пароля
@Bean
public PasswordEncoder encoder(){
return new BCryptPasswordEncoder(10);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(encoder() );
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/","/home","login","registration").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").defaultSuccessUrl("/").and()
.logout().logoutUrl("/logout").logoutSuccessUrl("/").permitAll();
}
接口UserRepo
@NoRepositoryBean
public interface UserRepo extends CrudRepository<User,Long> {
User findByUsername(String name);
}
细节服务
public class MyUserDetailsService implements UserDetailsService {
@Autowired
UserRepo userRepository;
@Override
public UserDetails loadUserByUsername(String username) throws
UsernameNotFoundException {
return userRepository.findByUsername(username);
}
}
丹尼斯。
stacktrace的最后一行显示:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name
'encoder': Requested bean is currently in creation: Is there an unresolvable circular reference?
这意味着当您试图在
configure
方法中使用“encoder”bean时,它正处于创建阶段。类似的问题已经解决了。我认为您应该按照这些问题的答案所建议的那样做-makeencoder()
方法静态。stacktrace的最后一行说这是“编码器”:请求的bean当前正在创建中:是否有一个不可解析的循环引用
,这几乎是不言自明的。将有对注入的依赖项的循环引用,这将导致此错误。我不太明白在这种情况下该怎么办他的情况。我需要它在控制器中加密密码…然后我该怎么做?你能提供userdetails服务实现吗?添加到描述中你的User
类是org.springframework.security.core.userdetails.User
还是你的自定义用户?这确实解决了一些问题。但还有一个问题。(com.security.Registration.controller.RegistrationController中的字段userRepo需要找不到类型为“com.security.Registration.repositories.userRepo”的bean。)
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name
'encoder': Requested bean is currently in creation: Is there an unresolvable circular reference?