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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
springboot中,可以通过在配置类中添加过滤器来实现对请求和响应的拦截和处理。具体步骤如下: 1. 创建一个过滤器类,继承自javax.servlet.Filter接口,并实现doFilter方法。 例如,创建一个名为MyFilter的过滤器类: ```java public class MyFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //对请求进行处理 chain.doFilter(request, response); //对响应进行处理 } } ``` 2. 在配置类中添加过滤器。 在Spring Boot中,可以通过@WebFilter注解来配置过滤器。在@Configuration类中添加以下代码: ```java @Configuration public class WebConfig { @Bean public FilterRegistrationBean<MyFilter> filterRegistrationBean() { FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new MyFilter()); registrationBean.addUrlPatterns("/*");//设置过滤器拦截的请求路径 registrationBean.setName("MyFilter");//设置过滤器名称 registrationBean.setOrder(1);//设置过滤器执行顺序 return registrationBean; } } ``` 在上述代码中,我们创建了一个FilterRegistrationBean对象,并设置了过滤器、拦截路径、名称和执行顺序。 3. 配置多个过滤器 如果需要配置多个过滤器,只需要在@Configuration类中添加多个@Bean方法,每个方法返回一个FilterRegistrationBean对象即可。 ```java @Configuration public class WebConfig { @Bean public FilterRegistrationBean<MyFilter> filter1RegistrationBean() { FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new MyFilter()); registrationBean.addUrlPatterns("/*");//设置过滤器拦截的请求路径 registrationBean.setName("MyFilter1");//设置过滤器名称 registrationBean.setOrder(1);//设置过滤器执行顺序 return registrationBean; } @Bean public FilterRegistrationBean<MyFilter> filter2RegistrationBean() { FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new MyFilter()); registrationBean.addUrlPatterns("/*");//设置过滤器拦截的请求路径 registrationBean.setName("MyFilter2");//设置过滤器名称 registrationBean.setOrder(2);//设置过滤器执行顺序 return registrationBean; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值