zhuyifan

fix(security): 修复登录拦截器中的权限验证问题

......@@ -6,13 +6,15 @@ import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.strategy.SaStrategy;
import cn.hutool.core.convert.Convert;
import com.infoloop.rpc.meizhongyiheservice.HospitalStatus;
import com.infoloop.tianting.clientcustomerservice.ClientCustomerHospitalRecordHospitalStatusEnum;
import com.infoloop.tianting.constant.CommonConstants;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.enums.LoginSourceEnum;
import com.infoloop.tianting.exception.ClientEndExceptions;
import com.infoloop.tianting.exception.ErrorCodeEnum;
import com.infoloop.tianting.model.common.ResponseResult;
import com.infoloop.tianting.service.client.ClientCustomerServiceRpcClient;
import com.infoloop.tianting.service.client.MeiZhongYiHeServiceClient;
import com.infoloop.tianting.service.client.OperatorServiceRpcClient;
import com.infoloop.tianting.service.client.WOperatorServiceRpcClient;
import com.infoloop.tianting.utils.ResponseUtil;
......@@ -34,6 +36,7 @@ import java.io.IOException;
public class LoginInterceptor extends HandlerInterceptorAdapter {
private final ClientCustomerServiceRpcClient clientCustomerServiceRpcClient;
private final MeiZhongYiHeServiceClient meiZhongYiHeServiceClient;
private final OperatorServiceRpcClient operatorServiceRpcClient;
private final WOperatorServiceRpcClient wOperatorServiceRpcClient;
......@@ -73,7 +76,20 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
final var customer = clientCustomerServiceRpcClient.getClientCustomerById(enterpriseId, loginId);
if (customer == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.VALIDATE_FAILED));
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.FORBIDDEN));
return false;
}
var record = clientCustomerServiceRpcClient.getClientCustomerHospitalRecordsByCustomerId(customer.getResponse().getEnterpriseId(), customer.getResponse().getId());
if (!record.hasResponse() || record.getResponse().getHospitalStatus() != ClientCustomerHospitalRecordHospitalStatusEnum.CURRENT) {
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.FORBIDDEN));
return false;
}
//还需要去读取HIS系统最新用户住院信息
final var hisCustomerHospitalRecord = meiZhongYiHeServiceClient.getCustomerDetailById(customer.getResponse().getHISCustomerId(), record.getResponse().getContractNo()).getCustomerHospitalRecord();
if (hisCustomerHospitalRecord.getHospitalStatus() != HospitalStatus.CURRENT) {
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.FORBIDDEN));
return false;
}
builder.id(loginId).enterpriseId(enterpriseId).name(customer.getResponse().getName()).openId(openId).loginSource(LoginSourceEnum.CUSTOMER);
......@@ -83,7 +99,7 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
final var opeartor = operatorServiceRpcClient.getCOperatorById(loginId);
if (opeartor == null) {
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.VALIDATE_FAILED));
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.FORBIDDEN));
return false;
}
builder.id(loginId).enterpriseId(enterpriseId).name(opeartor.getName()).loginSource(LoginSourceEnum.OPERATOR);
......@@ -92,7 +108,9 @@ public class LoginInterceptor extends HandlerInterceptorAdapter {
final var loginId = StpUtil.getLoginIdAsInt();
final var operator = wOperatorServiceRpcClient.getWOperatorById(loginId).getResponse();
if (operator.getId() == 0) {
throw ClientEndExceptions.AuthenticationFailure.build(ErrorCodeEnum.UNAUTHORIZED.name());
response.setStatus(HttpStatus.FORBIDDEN.value());
ResponseUtil.write(response, ResponseResult.failed(ErrorCodeEnum.FORBIDDEN));
return false;
}
builder.id(loginId).enterpriseId(enterpriseId).name(operator.getName()).loginSource(LoginSourceEnum.KDS);
return true;
......