代码之家  ›  专栏  ›  技术社区  ›  Harsh Pal

“org.springframework.security.crypto-password”类型的bean。找不到PasswordEncoder“

  •  0
  • Harsh Pal  · 技术社区  · 1 年前

    enter image description here 项目结构附为图片

    这是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中的字段passwordEncoder。UserServiceImpl需要类型为“org.springframework.security.crypto-password”的bean。找不到PasswordEncoder“。

    注入点具有以下注释: -@org.springframework.beans.factory.annotation。自动连线(必需=true)

    行动

    考虑定义一个类型为“org.springframework.security.crypto-password”的bean。配置中的PasswordEncoder。

    --我已经将该方法定义为@Bean,但仍然没有自动连接,请告诉我我在这段代码中做错了什么。谢谢你。

    我已经将该方法注释为@Bean,这样我就可以在服务类中自动连接它,但仍然无法工作。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Dimitri Mestdagh Lancer.Yan    1 年前

    你的 WebSecurity 类缺少 @Configuration 注释,因此它被Spring的组件扫描忽略。这就是为什么 PasswordEncoder bean没有被创建,因此它也不能被自动连接。

    @Configuration // Add this
    @EnableWebSecurity
    public class WebSecurity {
    
        @Bean
        public PasswordEncoder passwordEncoder(){
            return new BCryptPasswordEncoder(11);
        }
    
    }