Resultful API的拦截(切片Aspect)

代码 代码 1649 人阅读 | 0 人回复

<
目次



1、Resultful API的阻拦三种方法



  • 过滤器(Filter)
  • 阻拦器(Interceptor)
  • 切片(Aspect)
2、切片(Aspect)的演示示例(springboot项目)

1、自界说一个称号为TimeAspect的切片,代码以下:
  1. package com.xz.springsecuritydemo.aspect;
  2. import org.aspectj.lang.ProceedingJoinPoint;
  3. import org.aspectj.lang.annotation.*;
  4. import org.springframework.stereotype.Component;
  5. import java.util.Date;
  6. @Aspect//声明切里
  7. @Component//注进到容器
  8. public class TimeAspect {
  9.     //甚么时分起感化 利用注解,比方@Before()、 @After()、@AfterThrowing()、@AfterReturning()、@Around()
  10.     //正在哪些办法上启感化,正在注解中利用表达式
  11.     /**
  12.      * execution 暗示施行
  13.      * 第一个* 暗示任何的返回值
  14.      * com.xz.springsecuritydemo.modules.sys.controller.SysQueryController 要阻拦的类
  15.      * .* 暗示SysQueryController类中任何一个办法
  16.      * (..) 暗示SysQueryController类中任何一个办法的任何一个参数
  17.      * ProceedingJoinPoint 参数暗示当前阻拦办法的疑息工具
  18.      */
  19.     @Around("execution(* com.xz.springsecuritydemo.modules.sys.controller.SysQueryController.*(..))")
  20.     public Object handleConrtollerMethod(ProceedingJoinPoint pjp) throws Throwable {
  21.         System.out.println("time aspect start");
  22.         //获得办法的参数
  23.         Object[] args = pjp.getArgs();
  24.         for (Object arg:args){
  25.             System.out.println("办法的参数:"+arg);
  26.         }
  27.         long startTime = new Date().getTime();
  28.         Object proceed = pjp.proceed();
  29.         System.out.println("aspect 耗时:"+(new Date().getTime()-startTime));
  30.         
  31.         System.out.println("time aspect end");
  32.         return proceed;
  33.     }
  34. }
复造代码
2、自界说一个掌握类,代码以下:
  1. @RestController//暗示此Controller供给RestAPI
  2. public class SysQueryController {
  3.    /**
  4.      * @RequestMapping  映照http恳求url到java办法
  5.      * @RequestParam    映照恳求参数到java办法的参数
  6.      */
  7.     @RequestMapping(value = "/user1",method = RequestMethod.GET)
  8.     public void query1(@RequestParam String username){
  9.         System.out.println("query1====="+username);
  10.     }
  11. }
复造代码
3、测试步调


  • 启动项目,以下图:
    145828dc6jjuqjsvxzpc0e.jpg

  • 再用postman测试东西收收恳求,以下图:
    145828sasizh181hwa3a1d.jpg

  • 最初检察掌握态输出疑息,以下图:
    1. time aspect start
    2. 办法的参数:xz
    3. query1=====xz
    4. aspect 耗时:1
    5. time aspect end
    复造代码
    145829f0e922ew9eeo826e.jpg

5、输出第4步的内乱容表示自界说的切片Aspect阻拦器胜利。
3、切片(Aspect)特性



  • 由上里的示例可知:切片(Aspect)获得没有到本初的http恳求战呼应的疑息,可是能够获得到实正处理恳求的办法的参数值
4、Filter过滤器、Interceptor阻拦器 、Aspect切里 起感化的挨次



  • 先是Filter过滤器起感化
  • 然后Interceptor阻拦器起感化
  • 然后Aspect切里起感化
  • 最初进进Controller办法中
5、当掌握层(即Controller层)的办法扔非常时,Filter过滤器、Interceptor阻拦器 、Aspect切里 扔非常的挨次



  • 先是Aspect切里
  • 假如利用@ControllerAdvice自界说非常,再进进那个处理非常类
  • 然后Interceptor阻拦器
  • 然后Filter过滤器
  • 假如皆出处理,最初到tomcat

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复 关闭延时

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则