package com.gkhy.hazmat.framework.web.service; import cn.hutool.core.util.ObjectUtil; import com.gkhy.hazmat.common.domain.entity.SysUser; import com.gkhy.hazmat.common.domain.model.LoginUserDetails; import com.gkhy.hazmat.common.enums.DeleteStatus; import com.gkhy.hazmat.common.enums.UserStatus; import com.gkhy.hazmat.common.enums.UserTypeEnum; import com.gkhy.hazmat.common.exception.ApiException; import com.gkhy.hazmat.system.service.SysUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; 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; /** * 用户验证处理 */ @Slf4j @Service public class UserDetailServiceImpl implements UserDetailsService { @Autowired private SysUserService userService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { SysUser user=userService.selectUserByUsername(username); if (ObjectUtil.isNull(user)) { log.info("登录用户:{} 不存在.", username); throw new ApiException("登录用户不存在"); } else if (DeleteStatus.DELETED.getCode().equals(user.getDelFlag())) { log.info("登录用户:{} 已被删除.", username); throw new ApiException("登录用户已被删除"); } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { log.info("登录用户:{} 已被停用.", username); throw new ApiException("登录用户已被停用"); }else if(!UserTypeEnum.SYSTEM_USER.getCode().equals(user.getUserType())&&user.getCompanyId()==null){ log.info("登录用户:{} 公司信息缺失.", username); throw new ApiException("登录用户公司信息缺失"); } List authorities=new ArrayList<>(); if(UserTypeEnum.SYSTEM_USER.getCode().equals(user.getUserType())) { authorities.add(new SimpleGrantedAuthority("hazmat:manage:system")); }else if(UserTypeEnum.COMPANY_USER.getCode().equals(user.getUserType())){ authorities.add(new SimpleGrantedAuthority("hazmat:manage:company")); }else if(UserTypeEnum.NORMAL_USER.getCode().equals(user.getUserType())){ authorities.add(new SimpleGrantedAuthority("hazmat:manage:common")); } return new LoginUserDetails(user,authorities); } }