/**
* @author wuyc
* 这是security登录的核心业务部分,其继承了UserDetailsService,其中包含了多种登录验证的信息获取接口抽象
* loadUserByUsername只是其中一种,根据上层传递来的用户信息,通过mapper查取信息,然后进行一些业务判断
* selectAllPower方法获取到权限编码集合后,创建角色对象,根据权限列表为角色对象授权
* 最后通过User()方法返回一个UserDetails对象
*/
public class CustomUserDetailsServiceImpl implements UserDetailsService {
/**
* Description: SpringSecurity所需的:获取、组装用户信息(含授权信息)的UserDetails对象
* Author: wuyc
* Date: 2022/3/24 1:50
*/
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 根据用户名获取用户信息
AdminGroupInfo adminGroupInfo = adminGroupInfoMapper.getUserByName(username);
if (adminGroupInfo == null) {
throw new UsernameNotFoundException("用户不存在!");
}
// 获取该用户的权限列表
List<String> powerList = adminGroupPowerMapper.selectAllPower(adminGroupInfo.getAdminCode());
if (powerList == null || powerList.size() == 0) {
// 全局异常的处理
throw new ProException("尚未赋予权限!");
} else {
HashSet<GrantedAuthority> authorities = new HashSet<>();
authorities.clear();
// 将权限列表转换为Spring Security中的GrantedAuthority对象,并加入到权限集合中
powerList.parallelStream().forEach(power -> {
authorities.add(new SimpleGrantedAuthority(power));
});
// 返回包含用户名、密码和权限集合的UserDetails对象
return new User(username, adminGroupInfo.getPassword(), authorities);
}
}
}