码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用aop拦截自定义注解


    场景:第三方调用校验是否有权限,就是常规的校验appId和secret,一个项目中有自己公司服务调用的也有第三方调用的
    思路:在第三方调用的方法上添加一个自定义注解,在用aop拦截这个自定义注解

    1.先自定义一个注解

    1. @Documented
    2. @Target({ElementType.METHOD})
    3. @Inherited
    4. @Retention(RetentionPolicy.RUNTIME )
    5. public @interface OpenApi {
    6. /**
    7. * 开放平台的接口编码
    8. * @return
    9. */
    10. String encode() default "";
    11. }

    2.定义aop拦截 有该注解的方法或类(注解应用范围具体看注解的Target配置,OpenApi是应用到方法)

    1. @Aspect
    2. @Order(-1)// 保证该AOP在@Transactional之前执行
    3. @Component
    4. @Slf4j
    5. public class OpenApiAdvice {
    6. @Autowired
    7. private IVerifyService iVerifyService;
    8. //调用的方法有该注解才会拦截
    9. @Pointcut("@annotation(com.cunw.cloud.dataworks.annotation.OpenApi)")
    10. private void annotationPointCut() {
    11. }
    12. //环绕 满足上面的拦截条件就会调用该方法
    13. @Around("annotationPointCut()")
    14. public Object annotationAround(ProceedingJoinPoint joinPoint) throws Throwable {
    15. //获取方法
    16. Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
    17. //得到方法参数 这里是一个数组,因为我这里只有一个参数所以写了[0]
    18. Object args = joinPoint.getArgs()[0];
    19. // 获取该方法上的 OpenApi注解
    20. OpenApi aspectAnnotation = method.getAnnotation(OpenApi.class);
    21. //注解的方法(就是注解里定义的值)
    22. String encode = aspectAnnotation.encode();
    23. //写你的业务逻辑
    24. //校验appId,sign等参数
    25. iVerifyService.verify(args, openApiVO.getSecret());
    26. //正常往后执行
    27. return joinPoint.proceed();
    28. }
    29. }

    3. 最后  想想 拦截器和aop有什么区别?

  • 相关阅读:
    打点初级技巧
    C++ 和 C#的区别
    用vue3和typeScript封装一个axios类工具,来降低代码的耦合度,方便后期的维护与开发
    选择远程办公,选择放弃远程办公
    10.31 校招 实习 内推 面经
    雪花雪花雪花
    《500强高管谈VE》-新领域的VE及其成功的条件
    Sound/播放提示音, Haptics/触觉反馈, LocalNotification/本地通知 的使用
    (数据科学学习手札150)基于dask对geopandas进行并行加速
    黑客技术(网络安全)学习
  • 原文地址:https://blog.csdn.net/weixin_43075758/article/details/128136013
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号