update 优化数据权限缓存合并为一个 标注版本注释

This commit is contained in:
疯狂的狮子Li 2021-12-17 21:50:14 +08:00
parent d40b9324ca
commit 3fce90dbb9
5 changed files with 16 additions and 7 deletions

View File

@ -6,6 +6,7 @@ import java.lang.annotation.*;
* 数据权限 * 数据权限
* *
* @author Lion Li * @author Lion Li
* @version 3.5.0
*/ */
@Target(ElementType.METHOD) @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@ -6,6 +6,7 @@ import java.lang.annotation.*;
* 数据权限组 * 数据权限组
* *
* @author Lion Li * @author Lion Li
* @version 3.5.0
*/ */
@Target({ElementType.METHOD, ElementType.TYPE}) @Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

View File

@ -15,6 +15,7 @@ import lombok.Getter;
* 如需扩展更多自定义服务 可以参考 sdss 自行编写 * 如需扩展更多自定义服务 可以参考 sdss 自行编写
* *
* @author Lion Li * @author Lion Li
* @version 3.5.0
*/ */
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor

View File

@ -41,15 +41,15 @@ import java.util.stream.Collectors;
* 数据权限过滤 * 数据权限过滤
* *
* @author Lion Li * @author Lion Li
* @version 3.5.0
*/ */
@Slf4j @Slf4j
public class PlusDataPermissionHandler { public class PlusDataPermissionHandler {
/** /**
* 方法或类 注解的映射关系缓存 * 方法或类(名称) 注解的映射关系缓存
*/ */
private final Map<Method, DataPermission> methodCacheMap = new ConcurrentHashMap<>(); private final Map<String, DataPermission> dataPermissionCacheMap = new ConcurrentHashMap<>();
private final Map<Class<?>, DataPermission> classCacheMap = new ConcurrentHashMap<>();
/** /**
* 无效注解方法缓存用于快速返回 * 无效注解方法缓存用于快速返回
@ -154,24 +154,24 @@ public class PlusDataPermissionHandler {
DataPermission dataPermission; DataPermission dataPermission;
// 获取方法注解 // 获取方法注解
for (Method method : methods) { for (Method method : methods) {
dataPermission = methodCacheMap.get(method); dataPermission = dataPermissionCacheMap.get(method.getName());
if (ObjectUtil.isNotNull(dataPermission)) { if (ObjectUtil.isNotNull(dataPermission)) {
return dataPermission.value(); return dataPermission.value();
} }
if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) { if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class); dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class);
methodCacheMap.put(method, dataPermission); dataPermissionCacheMap.put(method.getName(), dataPermission);
return dataPermission.value(); return dataPermission.value();
} }
} }
dataPermission = classCacheMap.get(clazz); dataPermission = dataPermissionCacheMap.get(clazz.getName());
if (ObjectUtil.isNotNull(dataPermission)) { if (ObjectUtil.isNotNull(dataPermission)) {
return dataPermission.value(); return dataPermission.value();
} }
// 获取类注解 // 获取类注解
if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) { if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class); dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class);
classCacheMap.put(clazz, dataPermission); dataPermissionCacheMap.put(clazz.getName(), dataPermission);
return dataPermission.value(); return dataPermission.value();
} }
return null; return null;

View File

@ -24,6 +24,12 @@ import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
/**
* 数据权限拦截器
*
* @author Lion Li
* @version 3.5.0
*/
public class PlusDataPermissionInterceptor extends JsqlParserSupport implements InnerInterceptor { public class PlusDataPermissionInterceptor extends JsqlParserSupport implements InnerInterceptor {
private final PlusDataPermissionHandler dataPermissionHandler = new PlusDataPermissionHandler(); private final PlusDataPermissionHandler dataPermissionHandler = new PlusDataPermissionHandler();