无法找到“org.springframework.security.crypto.password.PasswordEncoder”类型的bean

问题描述 投票:0回答:1

在此处输入图像描述项目结构附为图像

这是 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,以便我可以在服务类中自动装配它,但仍然无法正常工作。

java spring-boot spring-mvc spring-security
1个回答
0
投票

您的

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

© www.soinside.com 2019 - 2024. All rights reserved.