revert(extension/crud): 还原 CrudRequestMapping 的 ignoreAuth、ignorePermission 支持(方案不优雅)

This commit is contained in:
2025-07-05 16:36:53 +08:00
parent e1c9a91c77
commit 0729be287c
4 changed files with 2 additions and 69 deletions

View File

@@ -23,8 +23,6 @@ import java.lang.annotation.*;
/**
* CRUD增删改查API
*
* <p>{@link CrudRequestMapping#apis} 优先级高于方法上的 @CrudApi</p>
*
* @author Charles7c
* @since 2.7.5
*/
@@ -37,14 +35,4 @@ public @interface CrudApi {
* API 类型
*/
Api value() default Api.LIST;
/**
* 是否忽略认证
*/
boolean ignoreAuth() default false;
/**
* 是否忽略权限校验
*/
boolean ignorePermission() default false;
}

View File

@@ -36,26 +36,8 @@ public @interface CrudRequestMapping {
*/
String value() default "";
/**
* API 列表
* <p>优先级高于 {@link #api}</p>
*/
CrudApi[] apis() default {};
/**
* API 列表
*/
Api[] api() default {Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.EXPORT};
/**
* 是否忽略认证
* <p>全部忽略,优先级低于 {@link CrudApi#ignoreAuth}</p>
*/
boolean ignoreAuth() default false;
/**
* 是否忽略权限校验
* <p>全部忽略,优先级低于 {@link CrudApi#ignorePermission}</p>
*/
boolean ignorePermission() default false;
}

View File

@@ -16,7 +16,6 @@
package top.continew.starter.extension.crud.aop;
import cn.hutool.core.util.ArrayUtil;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.aop.support.AopUtils;
@@ -24,11 +23,9 @@ import org.springframework.core.BridgeMethodResolver;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.util.ClassUtils;
import top.continew.starter.extension.crud.annotation.CrudApi;
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import top.continew.starter.extension.crud.controller.AbstractCrudController;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Objects;
/**
@@ -47,28 +44,10 @@ public class CrudApiAnnotationInterceptor implements MethodInterceptor {
Method specificMethod = ClassUtils.getMostSpecificMethod(invocation.getMethod(), targetClass);
Method targetMethod = BridgeMethodResolver.findBridgedMethod(specificMethod);
// 获取 @CrudApi 注解
CrudApi crudApi = this.getCrudApi(targetMethod, targetClass);
CrudApi crudApi = AnnotatedElementUtils.findMergedAnnotation(targetMethod, CrudApi.class);
// 执行处理
AbstractCrudController crudController = (AbstractCrudController)invocation.getThis();
crudController.preHandle(crudApi, invocation.getArguments(), targetMethod, targetClass);
return invocation.proceed();
}
/**
* 获取 @CrudApi 注解
*
* @param targetMethod 目标方法
* @param targetClass 目标类
* @return @CrudApi 注解
*/
private CrudApi getCrudApi(Method targetMethod, Class<?> targetClass) {
CrudRequestMapping crudRequestMapping = AnnotatedElementUtils
.findMergedAnnotation(targetClass, CrudRequestMapping.class);
CrudApi[] crudApis = crudRequestMapping.apis();
CrudApi crudApi = AnnotatedElementUtils.findMergedAnnotation(targetMethod, CrudApi.class);
if (ArrayUtil.isEmpty(crudApis)) {
return crudApi;
}
return Arrays.stream(crudApis).filter(api -> api.value() == crudApi.value()).findFirst().orElse(null);
}
}

View File

@@ -31,7 +31,6 @@ import top.continew.starter.extension.crud.enums.Api;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* CRUD 请求映射器处理器映射器
@@ -54,7 +53,7 @@ public class CrudRequestMappingHandlerMapping extends RequestMappingHandlerMappi
CrudRequestMapping crudRequestMapping = handlerType.getDeclaredAnnotation(CrudRequestMapping.class);
CrudApi crudApi = AnnotatedElementUtils.findMergedAnnotation(method, CrudApi.class);
// 过滤 API如果非本类中定义且 API 列表中不包含,则忽略
Api[] apis = this.getApis(crudRequestMapping);
Api[] apis = crudRequestMapping.api();
if (method.getDeclaringClass() != handlerType && !ArrayUtil.contains(apis, ExceptionUtils
.exToNull(crudApi::value))) {
return null;
@@ -63,21 +62,6 @@ public class CrudRequestMappingHandlerMapping extends RequestMappingHandlerMappi
return this.getMappingForMethodWrapper(method, handlerType, crudRequestMapping);
}
/**
* 获取 API 列表
*
* @param crudRequestMapping CRUD 请求映射
* @return API 列表
*/
private Api[] getApis(CrudRequestMapping crudRequestMapping) {
Api[] apiArr = crudRequestMapping.api();
CrudApi[] crudApiArr = crudRequestMapping.apis();
if (ArrayUtil.isEmpty(crudApiArr)) {
return apiArr;
}
return Arrays.stream(crudApiArr).map(CrudApi::value).toArray(Api[]::new);
}
/**
* 获取请求映射信息
*