diff --git a/sgzb-common/sgzb-common-security/pom.xml b/sgzb-common/sgzb-common-security/pom.xml index e531c52..b05698d 100644 --- a/sgzb-common/sgzb-common-security/pom.xml +++ b/sgzb-common/sgzb-common-security/pom.xml @@ -33,6 +33,12 @@ com.bonus.sgzb sgzb-common-redis + + cn.hutool + hutool-all + 5.8.23 + compile + diff --git a/sgzb-common/sgzb-common-security/src/main/java/com/bonus/sgzb/common/security/aspect/PreAuthorizeAspect.java b/sgzb-common/sgzb-common-security/src/main/java/com/bonus/sgzb/common/security/aspect/PreAuthorizeAspect.java index cd7d078..8ccecef 100644 --- a/sgzb-common/sgzb-common-security/src/main/java/com/bonus/sgzb/common/security/aspect/PreAuthorizeAspect.java +++ b/sgzb-common/sgzb-common-security/src/main/java/com/bonus/sgzb/common/security/aspect/PreAuthorizeAspect.java @@ -1,7 +1,11 @@ package com.bonus.sgzb.common.security.aspect; import java.lang.reflect.Method; - +import java.util.Objects; +import com.alibaba.fastjson2.JSON; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.bonus.sgzb.common.security.auth.AuthUtil; import com.bonus.sgzb.common.security.annotation.RequiresRoles; import org.aspectj.lang.ProceedingJoinPoint; @@ -54,9 +58,24 @@ public class PreAuthorizeAspect @Around("pointcut()") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { + //获取请求参数 + boolean needPermission = true; + Object[] args = joinPoint.getArgs(); + String argStr = JSON.toJSONString(args); + JSONArray jsonArray = JSONUtil.parseArray(argStr); + for (int i = 0; i < jsonArray.size(); i++) { + Object obj = jsonArray.getObj(i); + if (Objects.nonNull(obj) && obj instanceof JSONObject) { + JSONObject jsonObject = (JSONObject) obj; + if ("1".equals(jsonObject.getStr("skipPermission"))) { + needPermission = false; + } + } + } + // 注解鉴权 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); - checkMethodAnnotation(signature.getMethod()); + checkMethodAnnotation(signature.getMethod(), needPermission); try { // 执行原有逻辑 @@ -72,7 +91,7 @@ public class PreAuthorizeAspect /** * 对一个Method对象进行注解检查 */ - public void checkMethodAnnotation(Method method) + public void checkMethodAnnotation(Method method, boolean needPermission) { // 校验 @RequiresLogin 注解 RequiresLogin requiresLogin = method.getAnnotation(RequiresLogin.class); @@ -89,10 +108,11 @@ public class PreAuthorizeAspect } // 校验 @RequiresPermissions 注解 - RequiresPermissions requiresPermissions = method.getAnnotation(RequiresPermissions.class); - if (requiresPermissions != null) - { - AuthUtil.checkPermi(requiresPermissions); + if (needPermission) { + RequiresPermissions requiresPermissions = method.getAnnotation(RequiresPermissions.class); + if (requiresPermissions != null) { + AuthUtil.checkPermi(requiresPermissions); + } } } }