Springboot中关于Springboot-security的笔记

/**
 * @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);
        }
    }
}

扫描二维码,在手机上阅读!

发表评论

电子邮件地址不会被公开。 必填项已用*标注