猿问

没有“org.springframework.security.crypto.bcrypt.

我正在使用 BCryptPasswordEncoder 来编码我的密码,但是当我使用它的编码函数在 UserService 类的保存函数中对密码进行编码时,它给了我这个错误:

创建名称为“userController”的 bean 时出错:通过字段“userServiceInter”表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“userService”的 bean 时出错:通过字段“crypt”表达的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为“org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder”的合格 bean 可用:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

当我删除它时,它可以工作,但密码未编码。

用户服务类:

  @Service

   public class UserService implements UserServiceInterface{


@Autowired

UserRepository repo;


@Autowired

BCryptPasswordEncoder crypt;


@Autowired

RoleRepository roleRepo;


public void save(User user) {



        user.setPassword(crypt.encode(user.getPassword()));

        Role role = roleRepo.findByRole("USER");

        user.setRoles(new HashSet<Role>(Arrays.asList(role)));

        repo.save(user);



   }


@Override

public User findByUsername(String userName) {


    User user = repo.findByUserName(userName);

    return user;


}


    }

用户服务接口:


   @Service

    public interface UserServiceInterface {



public void save(User user);


public User findByUsername(String userName);


    }


莫回无
浏览 165回答 3
3回答

HUH函数

改变@AutowiredBCryptPasswordEncoder crypt;到@AutowiredPasswordEncoder crypt或更改passwordEncoder方法@BeanBCryptPasswordEncoder passwordEncoder() {&nbsp; &nbsp; return new BCryptPasswordEncoder();}

一只斗牛犬

如果你想知道“没有合格的 bean 类型”的含义从下面的代码@BeanPasswordEncoder passwordEncoder() {    return new BCryptPasswordEncoder();}绝对 bean 是使用type名称 创建的。passwordEncoder PasswordEncoder但@AutowiredBCryptPasswordEncoder crypt;上面的代码要求 spring 容器注入类型为 的 bean BCryptPasswordEncoder。(注意:passwordEncoder bean 可能是 BCryptPasswordEncoder 的实例,但 bean 的类型为PasswordEncoder,因此没有类型的 bean BCryptPasswordEncoder)因此异常没有类型为“org.springframework.security.crypto.bcrypt”的合格bean。BCryptPasswordEncoder '可用因此,您可以将 name 的 bean 自动装配passwordEncoder到 type 的字段PasswordEncoder。@AutowiredPasswordEncoder crypt;passwordEncoder您还可以从应用程序上下文中按名称获取 bean@AutowiredApplicationContext context;inYourMethod(){   PasswordEncoder crypt = context.getBean("passwordEncoder");}为了快速理解@Bean,@Autowired和@Qualifier简单的 6 个案例解释得很好情况 1:创建的 bean 类型和 Autowired 字段的类型不同 - [这不起作用](没有可用的 BCryptPasswordEncoder 类型的合格 bean)@AutowiredBCryptPasswordEncoder passwordEncoder;@BeanPasswordEncoder passwordEncoder() {    return new BCryptPasswordEncoder();}情况 2:创建的 bean 类型和 Autowired 字段的类型相同 - [这不起作用]@AutowiredPasswordEncoder passwordEncoder;@BeanPasswordEncoder passwordEncoder() {    return new BCryptPasswordEncoder();}情况 3:自动装配字段的类型是创建的 bean 的超类型 - [这将起作用] 创建的 bean 是否属于 BCryptPasswordEncoder 类型 -是 创建的 bean 是否属于 PasswordEncoder 类型 - 是@AutowiredPasswordEncoder passwordEncoder;@BeanBCryptPasswordEncoder passwordEncoder() {    return new BCryptPasswordEncoder();}情况 4:相同类型且没有 @Qualifier 的多个 bean - [这不起作用]NoUniqueBeanDefinitionException:没有可用的“osscpPasswordEncoder”类型的合格 bean:预期有单个匹配 bean,但发现 2:bcryptPasswordEncoder、md4PasswordEncoder@AutowiredPasswordEncoder bcrypt;@AutowiredPasswordEncoder md4;@Beanpublic PasswordEncoder bcryptPasswordEncoder() {    return new BCryptPasswordEncoder();}@Beanpublic PasswordEncoder md4PasswordEncoder() {    return new Md4PasswordEncoder();}案例 5:相同类型且带有 @Qualifier 的多个 bean - [这将起作用]限定符有助于选择要注入的 bean@Autowired@Qualifier("bcryptPasswordEncoder")PasswordEncoder bcrypt;@Autowired@Qualifier("md4PasswordEncoder")PasswordEncoder md4;@Beanpublic PasswordEncoder bcryptPasswordEncoder() {    return new BCryptPasswordEncoder();}@Beanpublic PasswordEncoder md4PasswordEncoder() {    return new Md4PasswordEncoder();}情况 6:相同类型的多个 bean,没有 @Qualifier,但字段名称与 bean 名称相同 - [这可行]这里,字段名称充当限定符,当存在多个相同类型的 bean 时,它会有所帮助。@AutowiredPasswordEncoder bcryptPasswordEncoder;@AutowiredPasswordEncoder md4PasswordEncoder;@Beanpublic PasswordEncoder bcryptPasswordEncoder() {    return new BCryptPasswordEncoder();}@Beanpublic PasswordEncoder md4PasswordEncoder() {    return new Md4PasswordEncoder();}

扬帆大鱼

在 applicationContext.xml 中添加此行,以便开发人员使用 xml。<bean&nbsp;id="bcrypt"&nbsp;class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"></bean>
随时随地看视频慕课网APP

相关分类

Java
我要回答