springboot自定义拦截器

十二 2022年04月26日 853 0

1. 什么是拦截器

拦截器(Interceptor)类似于Servlet中的过滤器,主要用于拦截客户请求并做出相应的处理。与过滤器有如下区别:

  1. 过滤器只能在容器初始化时被调用一次,在action的生命周期中,而拦截器可以多次被调用。
  2. 过滤器可以对几乎所有的请求起作用,拦截器只能对action请求起作用。
  3. 过滤器不能访问action上下文、值栈里的对象,而拦截器可以访问。
  4. 过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
  5. 过滤器是基于函数回调,而拦截器是基于java的反射机制的。
  6. 过滤器不能获取IOC容器中的各个bean,而拦截器可以,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

2. 拦截器的特点

  1. 请求到达经过拦截器,响应回来也经过拦截器
  2. 只能拦截控制器相关请求不能拦截JSP请求
  3. 拦截器可以中断用户请求轨迹

3. 拦截器的作用

将多个控制器中共有代码放入拦截器可以减少控制器代码冗余

4. spring中开发拦截器步骤

1. 创建自定义拦截器

创建一个自定义拦截器,实现HandlerInterceptor。

重写HandlerInterceptor中的三个方法:

  1. preHandle:在处理请求之前执行
  2. postHandle:在处理请求之后执行
  3. afterCompletion:顾名思义,在响应成功后执行

image-20220426220641059

2. 实现WebMvcConfigurer配置器

以前一般继承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter类,不过SrpingBoot 2.0以上WebMvcConfigurerAdapter类就过时了。

现在直接实现org.springframework.web.servlet.config.annotation.WebMvcConfigurer接口。

image-20220426221118932

3. controller里创建接口

我这边示例,就直接使用拦截器里定义的方法了。

image-20220426221311369

4. 访问

下面 我们依次访问两个接口

首先访问被拦截的login接口,我们发现,控制台输出了我们定义的输出

image-20220426221501064

再访问没有被拦截的get接口,发现,控制台只输出了方法内返回的内容,并没有返回拦截器的内容。

image-20220426232443791

到此,一个简易的拦截器就成功了,我们可以根据业务的不同在拦截器里面实现业务的逻辑了。😄

源码地址:点击访问欢迎学习并star

Last Updated: 2022/04/26 23:27:54
springboot的第一个web项目 springboot自定义异常处理