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("用户名或者密码不正确");
}
};
}