package com.ruoyi.common.security.service; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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 com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.UserStatus; import com.ruoyi.common.core.exception.BaseException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.domain.LoginUser; import com.ruoyi.system.api.RemoteUserService; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.model.UserInfo; /** * 用户信息处理 * * @author ruoyi */ @Service public class UserDetailsServiceImpl implements UserDetailsService { private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); @Autowired private RemoteUserService remoteUserService; @Override public UserDetails loadUserByUsername(String username) { R userResult = remoteUserService.getUserInfo(username); checkUser(userResult, username); return getUserDetails(userResult); } public void checkUser(R userResult, String username) { if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { log.info("登录用户:{} 不存在.", username); throw new UsernameNotFoundException("登录用户:" + username + " 不存在"); } else if (UserStatus.DELETED.getCode().equals(userResult.getData().getSysUser().getDelFlag())) { log.info("登录用户:{} 已被删除.", username); throw new BaseException("对不起,您的账号:" + username + " 已被删除"); } else if (UserStatus.DISABLE.getCode().equals(userResult.getData().getSysUser().getStatus())) { log.info("登录用户:{} 已被停用.", username); throw new BaseException("对不起,您的账号:" + username + " 已停用"); } } private UserDetails getUserDetails(R result) { UserInfo info = result.getData(); Set dbAuthsSet = new HashSet(); if (StringUtils.isNotEmpty(info.getRoles())) { // 获取角色 dbAuthsSet.addAll(info.getRoles()); // 获取权限 dbAuthsSet.addAll(info.getPermissions()); } Collection authorities = AuthorityUtils .createAuthorityList(dbAuthsSet.toArray(new String[0])); SysUser user = info.getSysUser(); return new LoginUser(user.getUserId(), user.getUserName(), user.getPassword(), true, true, true, true, authorities); } }