package com.jilongda.manage.security; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.jilongda.manage.authority.mapper.SecResourcesMapper; import com.jilongda.manage.authority.mapper.SecRoleMapper; import com.jilongda.manage.authority.mapper.SecUserMapper; import com.jilongda.manage.authority.model.SecRole; import com.jilongda.manage.authority.model.SecUser; import com.jilongda.manage.authority.service.SecUserService; import com.jilongda.manage.authority.vo.SecResourceVO; import com.jilongda.common.basic.Constant; import com.jilongda.common.utils.SpringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 用户登录认证信息查询 * * @author xiaochen * @date Jun 29, 2019 */ @Component("loadUserDetailsService") public class SysUserDetailsService implements UserDetailsService { @Autowired private SecUserMapper secUserMapper; @Autowired private SecRoleMapper secRoleMapper; @Autowired private SecResourcesMapper secResourcesMapper; @Autowired private SecUserService secUserService; @Override public SecurityUserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SecUser user = secUserMapper.selectOne(Wrappers.lambdaQuery(SecUser.class).eq(SecUser::getAccount, username).last(" LIMIT 1")); if (Objects.isNull(user)) { throw new UsernameNotFoundException("该用户不存在"); } SecurityUserDetails vo = SpringUtils.beanCopy(user, SecurityUserDetails.class); if (user.getAccount().equals(Constant.ADMIN)) { getAdminPermission(vo); } else { List roles = secRoleMapper.selectRolesByUid(user.getId()); List roleIds = roles.stream().map(SecRole::getId).collect(Collectors.toList()); List resources; if (CollectionUtils.isEmpty(roleIds)) { resources = new ArrayList<>(); } else { resources = secUserService.getResourceTag(user.getId()); } vo.setRoles(roles); vo.setResources(resources); } // 更新登录时间 SecurityUserDetails securityUserDetails = new SecurityUserDetails(); securityUserDetails.setId(user.getId()); securityUserDetails.setLastLoginTime(LocalDateTime.now()); secUserMapper.updateById(securityUserDetails); return vo; } /** * 为管理员赋所有权限 * * @param * @return */ private SecurityUserDetails getAdminPermission(SecurityUserDetails details) { List roles = secRoleMapper.selectList(Wrappers.emptyWrapper()); List resources = secUserService.selectUserResourcesTag(details.getId()); details.setRoles(roles); details.setResources(resources); return details; } }