@Slf4j @Aspect @Component public class CheckCorpTypeAspect { private QyWechatAuthService qyWechatAuthService; @Autowired private void setManage(QyWechatAuthService qyWechatAuthService){ this.qyWechatAuthService = qyWechatAuthService; } @Pointcut("@annotation(com.edu.archive.common.annotation.CheckCorpType)") public void pointcut(){ } @Around(value = "pointcut()") public Object checkCorpType(ProceedingJoinPoint joinPoint) throws Throwable { log.info("#### 进入校验授权企业类型方法 ####"); // 获取注解参数事件类型 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); CheckCorpType annotation = signature.getMethod().getAnnotation(CheckCorpType.class); // 获取参数 Object[] args = joinPoint.getArgs(); HomeSchoolEvent eventParams = (HomeSchoolEvent)args[0]; log.info("授权企业事件回调参数!事件类型 eventType={}, eventParams={} ", annotation.eventType().name(),JSON.toJSONString(eventParams)); // 授权企业ID String authCorpId = eventParams.getAuthCorpId(); log.info("事件回调授权企业ID={}", authCorpId); if (StringUtils.isBlank(authCorpId)) { log.error("回调事件请求参数!corpId is null lock fail"); throw new BusinessException("回调事件请求参数!corpId is null lock fail"); } if (this.checkCorpType(authCorpId)){ return joinPoint.proceed(); } return null; } /** * 校验企业类型 */ private boolean checkCorpType(String authCorpId){ // 校验企业类型 QyWechatAuth qyWechatAuth = qyWechatAuthService.selectByCorpid(authCorpId); if (ObjectUtil.isEmpty(qyWechatAuth)){ log.info("未查询到该企业的授权信息!corpId={}", authCorpId); return false; } if (QyWeChatTypeEnum.NON_EDUCATIONAL.getCode().equals(qyWechatAuth.getType())){ log.info("非教育类企业事件回调不做处理! corpId={}", authCorpId); return false; } return true; } }
备注:环绕通知=前置+目标方法执行+后置通知,proceed方法就是用于启动目标方法执行的