首页 > 其他分享 >AOP以注解为切入点,获取注解参数和切点方法参数名

AOP以注解为切入点,获取注解参数和切点方法参数名

时间:2023-11-13 17:12:28浏览次数:32  
标签:cn lettin org 切点 参数 import 注解 userNodeAuthCheckUtils

  • AOP以注解为切入点,获取注解参数和切点方法参数名
    import cn.lettin.base.response.ResponseObjBaseVo;
    import cn.lettin.base.response.ResponseVo;
    import cn.lettin.keeper.edge.utils.UserNodeAuthCheckUtils;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.springframework.stereotype.Component;
    
    import java.util.Arrays;
    import java.util.List;
    
    import static cn.lettin.common.exception.GlobalException.OK;
    
    @Aspect
    @Component
    public class UserNodeAuthCheckAop {
        private final UserNodeAuthCheckUtils userNodeAuthCheckUtils;
    
        public UserNodeAuthCheckAop(UserNodeAuthCheckUtils userNodeAuthCheckUtils) {
            this.userNodeAuthCheckUtils = userNodeAuthCheckUtils;
        }
    
        @Around(value = "@annotation(cn.lettin.keeper.edge.external.aspect.UserNodeAuth)")
        public Object check(ProceedingJoinPoint point) throws Throwable {
            // 获取目标方法上的注解
            MethodSignature methodSignature = (MethodSignature) point.getSignature();
            UserNodeAuth userNodeAuth = methodSignature.getMethod().getAnnotation(UserNodeAuth.class);
            // 下面两个数组中,参数值和参数名的个数和位置是一一对应的。
            Object[] args = point.getArgs(); // 参数值
            List<String> argNames = Arrays.asList(methodSignature.getParameterNames()); // 参数名
            String nodeId = (String) args[argNames.indexOf("nodeId")];
            Integer userId = (Integer) args[argNames.indexOf("userId")];
            Integer regionId = (Integer) args[argNames.indexOf("regionId")];
            ResponseVo<ResponseObjBaseVo> responseVo = userNodeAuthCheckUtils.authCheck(nodeId, userId, regionId, userNodeAuth.value());
            if (responseVo.getStatus() != OK) {
                return new ResponseVo<>(responseVo);
            }
            return point.proceed();
        }
    }

    转载自:https://blog.csdn.net/mengting2040/article/details/132433024

标签:cn,lettin,org,切点,参数,import,注解,userNodeAuthCheckUtils
From: https://www.cnblogs.com/wuxizhangjf/p/17829567.html

相关文章

  • Vue中如何在有传参的情况下传入默认参数event
    <el-buttontype='primary'@click='handleSearch("kkk",$event)'>我是默认参数</el-button>点击查看代码handleSearch(val,e){ if(e){ /*默认参数*/ }}想要在传递参数的基础上添加默认参数,在vue中要使用$event来代替......
  • Python中传参数args=(3,) 为什么要加上逗号
    python中传参数的是时候如果直接传args=(3),那么解释器会觉得你是传了一个数字而不是元组。只有args=(3,)这样传才会默认为传进一个元组。这是格式要求。例子如下 在pycharm上面创建线程的时候,只传一个参数会显示高亮警告: ......
  • 多层注解非必填处理
    一、场景当使用复合注解时,需要将多个注解包含到一个注解中时,注解字段是必填的,这时候需要处理二、解决方法复合注解@Documented@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceDataFilter{/***条件1*/Conditionorg......
  • 传递参数或查询字符串给_Layout.cshtml中的顶部导航在ASP.NET中的实现方式
    在ASP.NET中,你可以通过多种方式将参数或查询字符串传递给_Layout.cshtml中的顶部导航。以下是两种常见的方法:1.使用ViewBag:ViewBag是ASP.NETMVC框架中的一个特性,它允许你在视图和控制器之间传递数据。你可以在控制器中设置ViewBag的值,然后在_Layout.cshtml中使用这些值。示例代码......
  • SEM:估计参数
    估计参数是SEM中的另一个重要步骤,它涉及到确定模型中的各个参数的数值。这些参数包括潜在变量之间的关系、观察变量的测量和误差项等。以下是估计参数的主要步骤:设定模型:在进行参数估计之前,首先需要明确你的SEM模型,包括潜在变量的定义、观察变量之间的关系,以及每个观察变量与......
  • 212-c# url下载pdf,url请求,有参数,且携带cookies
    usingSystem;usingSystem.Net;usingSystem.Net.Http;usingSystem.Net.Http.Headers;usingSystem.Threading.Tasks;classProgram{staticvoidMain(){//设置要下载的PDF文件的URLstringpdfUrl="https://example.com/path/to/your/pdf......
  • 68.Oracle的内存参数设置
    如果服务器是100G内存,那么Oracle的内存参数可以按照如下进行配置:altersystemsetsga_max_size=40000Mscope=spfile;altersystemsetstreams_pool_size=1200Mscope=spfile;altersystemsetlarge_pool_size=200Mscope=spfile;altersystemsetpga_aggregate_target=......
  • Matlab pid参数调节工具箱
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • PHP参数加密
    Header每次使用API所需要的Header設定值ParameterTypeValueDescriptionAuthorizationstringapitoken系統商TokenContent-Typestringmultipart/form-data除GET、DELETE方法外都需要Sign每次呼叫都必須在網址加上一個sign參數,而sign參數是以傳遞資料及APIKEY產生:先將參數陣列照......
  • 【8.0】Go语言基础之可变函数参数、map的使用
    【一】可变长参数【1】任意长度的指定类型的参数packagemainimport"fmt"funcmain(){ //可变长参数 //调用函数 foo(1,2,3,4,5,6) //这是接收到的参数a:>>>>[123456] //这是接收到的参数a的类型:>>>>[]int}//可以接收任意长度的int类......