jiangping
2024-01-25 aaea4819b873c5ca7b9be1a87af173ee2015a12a
server/service/src/main/java/com/doumee/config/shiro/ShiroRealm.java
ÎļþÃû´Ó server/company/src/main/java/com/doumee/config/shiro/ShiroRealm.java ÐÞ¸Ä
@@ -4,12 +4,13 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.model.Company;
import com.doumee.dao.business.model.CompanyPermission;
import com.doumee.dao.system.model.SystemPermission;
import com.doumee.dao.system.model.SystemRole;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.CompanyService;
import com.doumee.service.business.CompanyPermissionService;
import com.doumee.service.business.impl.CompanyServiceImpl;
import com.doumee.service.system.SystemDataPermissionService;
import com.doumee.service.system.SystemPermissionService;
import com.doumee.service.system.SystemRoleService;
@@ -26,7 +27,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.ArrayList;
import java.util.List;
/**
@@ -43,6 +44,12 @@
    @Lazy
    @Autowired
    private SystemUserService systemUserService;
    @Lazy
    @Autowired
    private CompanyPermissionService companyPermissionService;
    @Lazy
    @Autowired
    private CompanyServiceImpl companyService;
    @Lazy
    @Autowired
@@ -51,10 +58,6 @@
    @Lazy
    @Autowired
    private SystemPermissionService systemPermissionService;
    @Lazy
    @Autowired
    private CompanyService companyService;
    /**
     * æƒé™å¤„理
@@ -77,34 +80,53 @@
     * @date 2022/03/15 09:54
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException{
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        // èŽ·å–ç”¨æˆ·å
        ShiroToken authenticationToken = (ShiroToken)token;
        String username = authenticationToken.getPrincipal().toString();
        // æ ¹æ®ç”¨æˆ·åæŸ¥è¯¢ç”¨æˆ·å¯¹è±¡
        SystemUser queryDto = new SystemUser();
        if(authenticationToken.isNeedPassword()){
            //账号密码登录
        queryDto.setUsername(username);
        }else{
            //手机号验证码登录
            queryDto.setMobile(username);
        }
        queryDto.setType(authenticationToken.getUserType());
        queryDto.setDeleted(Boolean.FALSE);
        SystemUser user = systemUserService.findOne(queryDto);
        if(user == null){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,账号或密码不正确!");
        }
        if(!Constants.equalsInteger(user.getType(),Constants.UserType.COMPANY.getKey())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,非企业账户身份,无法登录该平台!!");
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,账号信息不正确!");
        }
        if(!Constants.equalsInteger(user.getStatus(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,账号信息已被禁用,如有疑问请联系系统管理员!");
        }
        if(!user.getType().equals(Constants.UserType.SYSTEM)){
            Company company = companyService.findById(user.getCompanyId());
            if(company.getStatus().equals(Constants.ONE)){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业信息已被禁用,如有疑问请联系系统管理员!");
            }
            user.setCompany(company);
        }
        // èŽ·å–ç™»å½•ç”¨æˆ·ä¿¡æ¯
        List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
        List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions);
        if(authenticationToken.getUserType() == 0){
            CompanyPermission c = new CompanyPermission();
            c.setUserId(user.getId());
            c.setIsdeleted(Constants.ZERO);
            List<CompanyPermission> pList = companyPermissionService.findList(c);
            if(pList!=null){
                for (CompanyPermission cc : pList){
                    if(user.getCompanyIdList() == null){
                        user.setCompanyIdList(new ArrayList<>());
                    }
                    user.getCompanyIdList().add(cc.getCompanyId());
                }
            }
        }else{
            Company company = companyService.findById(user.getCompanyId());
            if(company == null){
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,企业账号信息不正确!");
            }
            user.setCompany(company);
        }
        // éªŒè¯ç”¨æˆ·
        return new SimpleAuthenticationInfo(userInfo, user.getPassword(), this.getName());
    }