在此处输入图像描述项目结构附为图像
这是 WebSecurity 课程
package com.demo.springsecurity.config;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@EnableWebSecurity
public class WebSecurity {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder(11);
}
}
这是服务类
package com.demo.springsecurity.service;
import com.demo.springsecurity.entity.User;
import com.demo.springsecurity.entity.VerificationToken;
import com.demo.springsecurity.model.UserModel;
import com.demo.springsecurity.repository.UserRepository;
import com.demo.springsecurity.repository.VerificationTokenRepository;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
@Service
@Log4j2
public class UserServiceImpl implements UserService{
@Autowired
private UserRepository userRepository;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private VerificationTokenRepository verificationTokenRepository;
@Override
public User registerUser(UserModel userModel) {
User user = User.builder()
.firstName(userModel.getFirstName())
.lastName(userModel.getLastName())
.role("User")
.build();
user.setPassword(passwordEncoder.encode(userModel.getPassword()));
user = userRepository.save(user);
log.info("User saved in db");
return user;
}
@Override
public void saveVerificationTokenForUser(String token, User user) {
VerificationToken verificationToken = new VerificationToken(user,token);
verificationTokenRepository.save(verificationToken);
}
}
如果您想要查看任何其他类文件代码以帮助我解决此问题,请告诉我。
错误: com.demo.springsecurity.service.UserServiceImpl 中的字段passwordEncoder 需要一个类型为“org.springframework.security.crypto.password.PasswordEncoder”的 bean,但无法找到。
注入点有以下注释: - @org.springframework.beans.factory.annotation.Autowired(必需= true)
行动:
考虑在配置中定义“org.springframework.security.crypto.password.PasswordEncoder”类型的 bean。
-- 我已将该方法定义为 @Bean 但仍未自动装配,请告诉我在这段代码中我做错了什么。谢谢你。
我已将该方法注释为 @Bean,以便我可以在服务类中自动装配它,但仍然无法正常工作。
您的
WebSecurity
类缺少 @Configuration
注释,因此 Spring 的组件扫描会忽略它。这就是为什么 PasswordEncoder
bean 没有被创建,因此它也不能被自动装配。