当前位置: 首页 > 知识库问答 >
问题:

不能奥托瓦尔。找不到'MyUserDetailsService'类型的bean

邓建柏
2023-03-14

IDEA编译器报告错误,但项目可以正常运行。原因何在?IDEA编译器报告错误,但项目可以正常运行。原因何在?

@Component
public class MyUserDetailsService implements UserDetailsService {

    @Resource
    MyRBACService myRBACService;

    @Override
    public UserDetails loadUserByUsername(String username)
                                      throws UsernameNotFoundException {

        //加载基础用户信息
        MyUserDetails myUserDetails = myRBACService.findByUserName(username);

        //加载用户角色列表
        List<String> roleCodes = myRBACService.findRoleByUserName(username);

        List<String> authorities = new ArrayList<>();
        for(String roleCode : roleCodes){
          //通过用户角色列表加载用户的资源权限列表
          authorities.addAll(myRBACService.findApiByRoleCode(roleCode));
        }

        //角色是一个特殊的权限,ROLE_前缀
        roleCodes = roleCodes.stream()
                .map(rc -> "ROLE_" +rc)
                .collect(Collectors.toList());

        authorities.addAll(roleCodes);

        myUserDetails.setAuthorities(
                AuthorityUtils.commaSeparatedStringToAuthorityList(
                        String.join(",",authorities)
                )
        );


        return myUserDetails;
    }
}
public class JWTAutoConfigure {

    @Resource
    private JwtProperties jwtProperties;


    @Bean
    public JwtTokenUtil jwtTokenUtil() {
        return new JwtTokenUtil(jwtProperties);
    }

    @Bean
    public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter(
            JwtTokenUtil jwtTokenUtil,
            MyUserDetailsService myUserDetailsService) {
        return new JwtAuthenticationTokenFilter(
                this.jwtProperties,jwtTokenUtil,myUserDetailsService);
    }
}

共有1个答案

卫念
2023-03-14

因为您的bean有一个接口,所以将使用JDK动态代理机制,并且您的bean定义将具有class/type=userDetailsService和name=myuserDetailsService。接下来,重要的是要知道Spring在默认情况下是按类型注入的。这就是为什么它会抱怨,因为您应该将bean注入为UserDetailsService。如果您有多个这种类型的bean,您应该添加@qualifier(“MyUserDetailsService”)

  @Bean
  public JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter(JwtTokenUtil jwtTokenUtil, 
                                                                   UserDetailsService userDetailsService) {
       return new JwtAuthenticationTokenFilter(this.jwtProperties, jwtTokenUtil, userDetailsService);
  }
 类似资料:
  • 你能帮我解决为什么我不能上课吗??UserDAOImpl类: 我想让这个班变成另一个班:

  • 谷歌宣布,自2019年8月1日起,所有新应用程序和应用程序更新都必须提供64位版本和32位版本。我有一个Ionic 3(Cordova)应用程序,我不确定这会有什么影响。具体来说,爱奥尼亚/科尔多瓦应用程序需要做什么才能满足这一要求? 从2019年8月1日开始: 发布到Google Play时,除了32位版本外,所有包含本机代码的新应用和应用更新都必须提供64位版本。

  • 我在Spring网站上跟踪这个SpringBoot演示,学习如何创建一个接受上传的文件。我收到一条错误消息: 我试图通过向FileUploadController添加注释来修复它。 我已尝试将以下依赖项添加到build.gradle 注意:我不想将数据库连接到此演示项目。这个演示确认它不是在这个演示中尝试连接数据库,而是在生产环境中尝试连接数据库。 我尝试在Storage Service接口上方添

  • 当开始使用模型时,我得到了以下错误 未找到类帖子。 我所做的一切: -使用命令 -尝试使用

  • 我正在使用和。它在这里 我有一个像这样的域名。而且,似乎不推荐使用注释,所以我使用了。 类如下所示 使用该类的如下所示 但当我启动应用程序时,我得到了错误 问题出在哪里?