
love.keeping.starter.web.aop.OpenApiAspect Maven / Gradle / Ivy
package love.keeping.starter.web.aop;
import love.keeping.starter.common.exceptions.impl.AccessDeniedException;
import love.keeping.starter.common.utils.ArrayUtil;
import love.keeping.starter.common.utils.CollectionUtil;
import love.keeping.starter.web.annotations.OpenApi;
import love.keeping.starter.web.sign.CheckSignFactory;
import love.keeping.starter.web.sign.CheckSignHandler;
import love.keeping.starter.web.common.utils.ApplicationUtil;
import love.keeping.starter.web.vo.OpenApiReqVo;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* OpenApi切面
*
* @author Keeping
*/
@Aspect
public class OpenApiAspect {
@Pointcut("(@within(org.springframework.web.bind.annotation.RestController) || @within(org.springframework.stereotype.Controller)) && @annotation(love.keeping.starter.web.annotations.OpenApi) && execution(public * *(..))")
public void openApiPointCut() {
}
@Around(value = "openApiPointCut()")
public Object openApi(ProceedingJoinPoint joinPoint) throws Throwable {
Logger logger = LoggerFactory.getLogger(joinPoint.getTarget().getClass());
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
OpenApi openApi = signature.getMethod().getAnnotation(OpenApi.class);
Object[] args = joinPoint.getArgs();
CheckSignFactory checkSignFactory = ApplicationUtil.getBean(CheckSignFactory.class);
CheckSignHandler checkSignHandler = checkSignFactory.getInstance();
if (openApi.sign()) {
if (ArrayUtil.isEmpty(args)) {
throw new AccessDeniedException("验签失败!");
}
List reqList = Arrays.stream(args).filter(t -> t instanceof OpenApiReqVo)
.map(t -> (OpenApiReqVo) t).collect(Collectors.toList());
if (CollectionUtil.isEmpty(reqList)) {
throw new AccessDeniedException("验签失败!");
}
for (OpenApiReqVo req : reqList) {
if (!checkSignHandler.check(req)) {
throw new AccessDeniedException("验签失败!");
}
checkSignHandler.setTenantId(req);
}
}
// 如果openApi.sign() 为false,那么需要接口自己设置TenantId
Object value = joinPoint.proceed();
return value;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy