繁体   English   中英

Spring Security,PasswordEncoder问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM