package jnpf.granter; import jnpf.base.ActionResult; import jnpf.base.UserInfo; import jnpf.constant.MsgCode; import jnpf.consts.AuthConsts; import jnpf.consts.DeviceType; import jnpf.database.util.TenantDataSourceUtil; import jnpf.exception.LoginException; import jnpf.model.BaseSystemInfo; import jnpf.model.LoginVO; import jnpf.model.tenant.TenantVO; import jnpf.permission.UserApi; import jnpf.permission.entity.UserEntity; import jnpf.permission.model.user.UserInfoModel; import jnpf.util.UserProvider; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; import static jnpf.granter.TenantSaasGranter.GRANT_TYPE; @Slf4j @Component(GRANT_TYPE) public class TenantSaasGranter extends AbstractTokenGranter { public static final String GRANT_TYPE = "saas"; public static final Integer ORDER = 1; private static final String URL_LOGIN = ""; private UserApi userApi; @Autowired public void setUserApi(UserApi userApi) { this.userApi = userApi; } public TenantSaasGranter() { super(URL_LOGIN); } public TenantSaasGranter(String authenticationUrl) { super(authenticationUrl); } @Override public ActionResult granter(Map loginParameters) throws LoginException { String account = loginParameters.get("account"); String tenantId = loginParameters.get("tenantId"); UserInfo userInfo = UserProvider.getUser(); userInfo.setUserAccount(account + "@" + tenantId); //切换租户 switchTenant(userInfo); //获取系统配置 BaseSystemInfo baseSystemInfo = getSysconfig(userInfo); //用户验证 UserEntity userByAccount = userApi.getInfoByAccount(new UserInfoModel(userInfo.getUserAccount(), userInfo.getTenantId())); if (userByAccount == null) { throw new LoginException(MsgCode.LOG119.get()); } //登录账号 super.loginAccount(userInfo, baseSystemInfo); //返回登录信息 LoginVO loginResult = getLoginVo(userInfo); return ActionResult.success(loginResult); } protected LoginVO getLoginVo(UserInfo userInfo) { LoginVO loginVO = new LoginVO(); loginVO.setTheme(userInfo.getTheme()); loginVO.setToken(userInfo.getToken()); if (configValueUtil.isMultiTenancy()) { //删除卫翎信息 TenantVO tenantVO = TenantDataSourceUtil.getCacheTenantInfo(userInfo.getTenantId()); if (tenantVO != null && tenantVO.getWl_qrcode() != null) { loginVO.setWlQrcode(tenantVO.getWl_qrcode()); tenantVO.setWl_qrcode(null); TenantDataSourceUtil.setTenantInfo(tenantVO); } } return loginVO; } @Override public int getOrder() { return ORDER; } @Override public ActionResult logout() { UserInfo userInfo = UserProvider.getUser(); if (userInfo.getUserId() != null) { if ("1".equals(String.valueOf(loginService.getBaseSystemConfig(userInfo.getTenantId()).getSingleLogin()))) { UserProvider.logoutByUserId(userInfo.getUserId(), DeviceType.valueOf(userInfo.getLoginDevice())); } else { UserProvider.logoutByToken(userInfo.getToken()); } } return ActionResult.success(MsgCode.OA014.get()); } @Override protected String getGrantType() { return GRANT_TYPE; } @Override protected String getUserDetailKey() { return AuthConsts.USERDETAIL_ACCOUNT; } }