资讯专栏INFORMATION COLUMN

Resultful API的拦截(切片Aspect)

huaixiaoz / 2550人阅读

摘要:目录一的拦截三种方式二切片的演示示例项目三切片特点四过滤器拦截器切面起作用的顺序五当控制层即层的方法抛异常时,过滤器拦截器切面抛异常的顺序一的拦截三种方式过滤器拦截器切片二切片的演示示例项目自定义一个名称为的切片,代码

一、Resultful API的拦截三种方式

  • 过滤器(Filter)
  • 拦截器(Interceptor)
  • 切片(Aspect)

二、切片(Aspect)的演示示例(springboot项目)

1、自定义一个名称为TimeAspect的切片,代码如下:

package com.xz.springsecuritydemo.aspect;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;import java.util.Date;@Aspect//声明切面@Component//注入到容器public class TimeAspect {    //什么时候起作用 使用注解,例如@Before()、 @After()、@AfterThrowing()、@AfterReturning()、@Around()    //在哪些方法上启作用,在注解中使用表达式    /**     * execution 表示执行     * 第一个* 表示任何的返回值     * com.xz.springsecuritydemo.modules.sys.controller.SysQueryController 要拦截的类     * .* 表示SysQueryController类中任何一个方法     * (..) 表示SysQueryController类中任何一个方法的任何一个参数     * ProceedingJoinPoint 参数表示当前拦截方法的信息对象     */    @Around("execution(* com.xz.springsecuritydemo.modules.sys.controller.SysQueryController.*(..))")    public Object handleConrtollerMethod(ProceedingJoinPoint pjp) throws Throwable {        System.out.println("time aspect start");        //获取方法的参数        Object[] args = pjp.getArgs();        for (Object arg:args){            System.out.println("方法的参数:"+arg);        }        long startTime = new Date().getTime();        Object proceed = pjp.proceed();        System.out.println("aspect 耗时:"+(new Date().getTime()-startTime));                System.out.println("time aspect end");        return proceed;    }}

2、自定义一个控制类,代码如下:

@RestController//表示此Controller提供RestAPIpublic class SysQueryController {   /**     * @RequestMapping  映射http请求url到java方法     * @RequestParam    映射请求参数到java方法的参数     */    @RequestMapping(value = "/user1",method = RequestMethod.GET)    public void query1(@RequestParam String username){        System.out.println("query1====="+username);    } }

3、测试步骤

  • 启动项目,如下图:

  • 再用postman测试工具发送请求,如下图:

  • 最后查看控制态输出信息,如下图:

    time aspect start方法的参数:xzquery1=====xzaspect 耗时:1time aspect end

5、输出第4步的内容表示自定义的切片Aspect拦截器成功。

三、切片(Aspect)特点

  • 由上面的示例可知:切片(Aspect)获取不到原始的http请求和响应的信息,但是可以获取到真正处理请求的方法的参数值

四、Filter过滤器、Interceptor拦截器 、Aspect切面 起作用的顺序

  • 先是Filter过滤器起作用
  • 然后Interceptor拦截器起作用
  • 然后Aspect切面起作用
  • 最后进入Controller方法中

五、当控制层(即Controller层)的方法抛异常时,Filter过滤器、Interceptor拦截器 、Aspect切面 抛异常的顺序

  • 先是Aspect切面
  • 如果使用@ControllerAdvice自定义异常,再进入这个处理异常类
  • 然后Interceptor拦截器
  • 然后Filter过滤器
  • 如果都没处理,最后到tomcat

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119357.html

相关文章

  • Resultful API拦截(过滤器——Filter)

    摘要:四过滤器拦截器切面起作用的顺序先是过滤器起作用然后拦截器起作用然后切面起作用最后进入方法中五当控制层即层的方法抛异常时,过滤器拦截器切面抛异常的顺序先是切面如果使用自定义异常再进入这个处理异常类然后拦截器然后过滤器如果都没处理,最后到 ...

    ckllj 评论0 收藏0
  • 分享笔记:SpringBoot三种拦截服务【Filter,Interceptor,Aspect

    摘要:拦截服务一使用第三方过滤器直接加入项目拦截服务二使用自定义拦截器拦截服务三使用切片完结 Spring拦截服务【一】(SpringBoot使用第三方过滤器Filter直接加入项目) Spring拦截服务【二】(SpringBoot使用自定义拦截器Interceptor) Spring拦截服务【三】(SpringBoot使用切片Aspect)【完结】

    qujian 评论0 收藏0
  • 像@Transactional一样利用注解自定义aop切片

    摘要:像一样利用注解自定义切片在中,利用注解可以很轻松的利用技术进行事物管理。表明该注解在运行时也是有效的。其中用来声明切片的实现。在这个代码里面,最关键的一步是这个声明与普通的注解式声明切片类似,只是其中表明该切片作用范围为声明的注解作用范围。 像@Transactional一样利用注解自定义aop切片 在spring中,利用@Transactional注解可以很轻松的利用aop技术进行事...

    zhangke3016 评论0 收藏0
  • 【好好面试】手把手调试,教你分析Spring-Aop

    摘要:思考之所以会选择为切入点,是因为通过命名可以看出这是用来构建代理强化对象的地方,并且由于是先将目标类加载到内存中,之后通过修改字节码生成目标类的子类,因此我猜测强化是在目标类实例化后触发的时候进行的。 【干货点】 此处是【好好面试】系列文的第11篇文章。看完该篇文章,你就可以了解Spring中Aop的相关使用和原理,并且能够轻松解答Aop相关的面试问题。更重要的是,很多人其实一看源码就...

    aervon 评论0 收藏0
  • 学Aop?看这篇文章就够了!!!

    摘要:又是什么其实就是一种实现动态代理的技术,利用了开源包,先将代理对象类的文件加载进来,之后通过修改其字节码并且生成子类。 在实际研发中,Spring是我们经常会使用的框架,毕竟它们太火了,也因此Spring相关的知识点也是面试必问点,今天我们就大话Aop。特地在周末推文,因为该篇文章阅读起来还是比较轻松诙谐的,当然了,更主要的是周末的我也在充电学习,希望有追求的朋友们也尽量不要放过周末时...

    boredream 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<