• springboot配置过滤器和多个拦截器、执行顺序


    过滤器配置的两种方法

    注解配置

    @WebFilter+包扫描@ServletComponentScan(“com.jl.springboottest”),
    首先我们定义一个MyFilter 实现Filter接口。重写里面的三个方法

    @Order(1)
    @WebFilter(filterName = "myFilter1",urlPatterns = {"/hello/*"})
    public class DemoFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            System.out.println("init");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("come");
            filterChain.doFilter(servletRequest,servletResponse);
            System.out.println("out");
        }
    
        @Override
        public void destroy() {
            System.out.println("destroy");
        }
    }
    

    代码说明:

    1.@WebFilter注解,filterName属性表示filter的名称,urlPatter表示要拦截的URL资源,可以是一个或者多个。用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 )

    2.@Order(1)表示如果有多个拦截器的话就是设置这个拦截器的运行等级,数字越小,越先执行

    3.init()方法只会执行一次,初始化过滤器。

    4.doFilter()核心方法,配置过滤器的逻辑代码。

    5.destroy()只会在项目停止或者是项目重新部署的时候才会执行。

    配置完上面的之后我们还需要在启动类加上一个扫描包的注解,开启包扫描。@ServletComponentScan(“com.example.demofilter.filter”),当然你也可以不用写包的具体地址,不传参数,但是建议是传参数,并且这个采参数也可以传多个的。

    以上就完成了一个Filter的基本配置,运行项目即可看到效果,还有一种非注解形式的配置方式。
    在这里插入图片描述
    在这里插入图片描述

    java配置

    我们可以通过自己定义一个java配置文件,将自定义的Filter 注册到到FilterRegistrationBean里面。

    @Configuration
    public class FilterConfig {
        @Bean
        public FilterRegistrationBean registFilter(){
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            registrationBean.setFilter(new MyFilter());
            registrationBean.addUrlPatterns("/*");
            registrationBean.setName("Filter1");
            registrationBean.setOrder(1);
            return registrationBean;
        }
    }
    

    这个配置和上面的注解配置类似。上面注解实现的原理也是这样的,虽然是两种不同的方法,但是是一样的原理。
    在这里插入图片描述
    在这里插入图片描述

    拦截器配置

    创建两个拦截器,重写方法
    在这里插入图片描述
    在这里插入图片描述
    创建配置类,实现WebMvcConfigurer
    在这里插入图片描述
    order越小,越先执行,否则按照register配置的顺序执行

    执行顺序

    在这里插入图片描述

    参考文档:https://www.cnblogs.com/Timeouting-Study/p/16078773.html
    https://blog.csdn.net/K_520_W/article/details/124529633

  • 相关阅读:
    java基于springboot+vue的汽车租赁系统-在线租车
    element 去掉form表单的某一项单个form-Item校验
    【软考笔记】(二)程序设计语言
    STL类模板入门
    [自研开源] MyData 数据集成之数据过滤 v0.7.2
    【树莓派】项目中找不到第三方库的问题
    elasticsearch 6.3.2 集群配置
    Programiranje 方法记录
    GDB调试之strip
    @RabbitListener和@RabbitHandler的使用
  • 原文地址:https://blog.csdn.net/weixin_44348734/article/details/127109028