springboot使用拦截器-过滤器-servlet-listener

项目地址https://github.com/heng1234/springboot2.x/tree/master/inte_filter_servlet

一、springboot使用拦截器

一个拦截器,只有preHandle方法返回true,postHandle、afterCompletion才有可能被执行;如果preHandle方法返回false,则该拦截器的postHandle、afterCompletion必然不会被执行。拦截器不是Filter,却实现了Filter的功能,其原理在于:

所有的拦截器(Interceptor)和处理器(Handler)都注册在HandlerMapping中。 Spring MVC中所有的请求都是由DispatcherServlet分发的。 当请求进入DispatcherServlet.doDispatch()时候,首先会得到处理该请求的Handler(即Controller中对应的方法)以及所有拦截该请求的拦截器。拦截器就是在这里被调用开始工作的。

新建WebMvcConfigurer实现WebMvcConfigurer

import com.boot.inte_filter_servlet.interceptor.init.UserInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

/**
 * @author : kaifa
 * create at:  2019-11-04  18:18
 * @description: 拦截器配置
 */
@Configuration
public class WebMvcConfigurer implements org.springframework.web.servlet.config.annotation.WebMvcConfigurer {

    @Autowired
    private UserInterceptor userInterceptor;

    //配置拦截的资源以及放行的资源
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        /**
         * 拦截器按照顺序执行
         */
       //拦截Controller所有 /*/**   userInterceptor是定义的拦截器
        registry.addInterceptor(userInterceptor)
          //拦截的url /**是所有
                .addPathPatterns("/**")
                //不拦截url
                .excludePathPatterns("/user/notInit")
                //放行静态资源
                .excludePathPatterns("/img/**","/css/**","/fonts/**","/js/**");

    }

    //配置静态资源的位置
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

    }

}

定义拦截器

UserInterceptor实现HandlerInterceptor

controller测试拦截器

访问http://localhost:7008/user/init

image-20191105174702984

访问http://localhost:7008/user/notInit则不会拦截因为拦截器配置了不拦截此路径

二、springboot使用过滤器注解版

在启动类加上@ServletComponentScan注解

UserWebFilter

测试过滤器

启动项目

image-20191105183357048

访问url

image-20191105183411421

停止工程

image-20191105183439661
image-20191106093443990

三、springboot使用servlet

UserServlet

访问http://localhost:7008/user

image-20191106103203218

四、springboot使用listener

下一章:springboot中使用异步调用(线程池)

Last updated

Was this helpful?