UserDetailsService

380 阅读1分钟

UserDetailsService

该接口的主要功能是从数据库中查询用户名和密码,从而进行登录信息校验。内部只有一个方法loadUserByUserName,也可以看作函数式接口,可以通过lambda表达式、匿名实现类等方式获取对象。因为它通常用在登录Service层中,需要交由Spring容器进行管理,因此,在springsecurity配置文件中以 @Bean 方式进行注入。loadUserByUserName的返回对象是UserDetails(这里,Admin实现了UserDetails接口),该类中以下几个重要方法:

  • Collection<? extends GrantedAuthority> getAuthorities(); 获取用户权限集合
  • String getPassword(); 获取用户密码
  • String getUsername(); 获取用户名
  • boolean isEnabled(); 用户是否可用
  • ...
    @Override
    @Bean
    public UserDetailsService userDetailsService() {
        /*return username -> {
            Admin admin = adminService.getAdminByUserName(username);
            if(admin!=null){
                return admin;
            }
            return null;
        };*/

        return new UserDetailsService() {
            @Override
            public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
                Admin admin = adminService.getAdminByUserName(username);
                if(null!=admin){
                    admin.setRoles(adminService.getRoles(admin.getId()));
                    return admin;
                }
                throw new UsernameNotFoundException("用户名或者密码不正确");
            }
        };
    }