diff --git a/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/aop/DataPermissionInterceptor.java b/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/aop/DataPermissionInterceptor.java index 0a0937d..b7320a3 100644 --- a/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/aop/DataPermissionInterceptor.java +++ b/axzo-common-data-permission/src/main/java/cn/axzo/framework/datapermission/aop/DataPermissionInterceptor.java @@ -17,7 +17,10 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.*; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.core.annotation.Order; @@ -31,8 +34,6 @@ import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; -import static cn.axzo.framework.datapermission.context.DataPermissionContextHolder.DATA_PERMISSION_HEADER; - /** * 解析数据权限规则,把解析后的数据放置在上下文中DataPermissionContext */ @@ -81,8 +82,7 @@ public class DataPermissionInterceptor { @Around(value = "@within(dataPermission) && @within(restController)") @SneakyThrows public Object classHandler(ProceedingJoinPoint pjp, DataPermission dataPermission, RestController restController) { - handle(dataPermission); - return pjp.proceed(pjp.getArgs()); + return proceed(pjp, dataPermission); } /** @@ -91,8 +91,18 @@ public class DataPermissionInterceptor { @Around(value = "@annotation(dataPermission) && mappingAnnotations()") @SneakyThrows public Object methodHandler(ProceedingJoinPoint pjp, DataPermission dataPermission) { - handle(dataPermission); - return pjp.proceed(pjp.getArgs()); + return proceed(pjp, dataPermission); + } + + private Object proceed(ProceedingJoinPoint pjp, DataPermission dataPermission) throws Throwable { + Object result; + try { + handle(dataPermission); + result = pjp.proceed(pjp.getArgs()); + } finally { + DataPermissionContextHolder.remove(); + } + return result; } @AfterThrowing(value = "(@within(cn.axzo.framework.datapermission.annotation.DataPermission) && @within(org.springframework.web.bind.annotation.RestController)) " +