新建com.itheima.stock.security.service.LoginUserDetailService
package com.itheima.stock.security.service; import com.google.common.base.Strings; import com.itheima.stock.mapper.SysRoleMapper; import com.itheima.stock.mapper.SysUserMapperExt; import com.itheima.stock.pojo.entity.SysPermission; import com.itheima.stock.pojo.entity.SysRole; import com.itheima.stock.pojo.entity.SysUser; import com.itheima.stock.service.PermissionService; import com.itheima.stock.vo.resp.PermissionRespNodeVo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 定义获取用户详情服务Bean */ @Service("userDetailsService") public class LoginUserDetailService implements UserDetailsService { @Autowired private SysUserMapperExt sysUserMapperExt; @Autowired private PermissionService permissionService; @Autowired private SysRoleMapper sysRoleMapper; /** * 根据用户名获取用户详情:用户名,密码,权限集合等 * * @param username * @return * @throws UsernameNotFoundException */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //根据用户名查询查询数据库中用户详情 SysUser dbUser = sysUserMapperExt.findUserByUserName(username); if (dbUser == null) { throw new UsernameNotFoundException("用户不存在"); } //获取指定用户的权限集合 添加获取侧边栏数据和按钮权限的结合信息 List<SysPermission> permissions = permissionService.getPermissionByUserId(dbUser.getId()); List<SysRole> roles = sysRoleMapper.getRoleByUserId(dbUser.getId()); //获取树状权限菜单数据 List<PermissionRespNodeVo> menus = permissionService.getTree(permissions, 0l, true); //获取菜单按钮集合 List<String> authBtnPerms = permissions.stream() .filter(per -> !Strings.isNullOrEmpty(per.getCode()) && per.getType() == 3) .map(per -> per.getCode()).collect(Collectors.toList()); List<String> ps = new ArrayList<String>(); //获取security的权限标识 List<String> pers = permissions.stream() .filter(per -> StringUtils.isNotBlank(per.getPerms())) .map(per -> per.getPerms()) .collect(Collectors.toList()); ps.addAll(pers); List<String> rs = roles.stream().map(r -> "ROLE_" + r.getName()).collect(Collectors.toList()); ps.addAll(rs); String[] psArray = ps.toArray(new String[ps.size()]); //将用户拥有的权限标识转化为权限对象 List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList(psArray); return null; } }