SpringBoot——》FilterRegistrationBean过滤器

步骤:
1、实现javax.servlet.Filter接口,实现doFilter()方法
2、添加@Configuration注解,通过FilterRegistrationBean实例注册,将自定义Filter加入过滤链,可自定义过滤器的优先级、拦截路径

一、实现Filter接口

为了演示优先级,这里创建2个测试过滤器类:Test1Filter、Test2Filter

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class Test1Filter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("自定义过滤器filter1,拦截url:"+request.getRequestURI());
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class Test2Filter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("自定义过滤器filter2,拦截url:"+request.getRequestURI());
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

二、将自定义Filter加入过滤链

import com.eju.houseparent.config.starter.cat.Test1Filter;
import com.eju.houseparent.config.starter.cat.Test2Filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class TestFilterRegistrationBean{
    @Bean
    public FilterRegistrationBean<Test1Filter> RegistTest1(){
        //通过FilterRegistrationBean实例设置优先级可以生效
        FilterRegistrationBean<Test1Filter> bean = new FilterRegistrationBean<Test1Filter>();
        bean.setFilter(new Test1Filter());//注册自定义过滤器
        bean.setName("flilter1");//过滤器名称
        bean.addUrlPatterns("/*");//过滤所有路径
        bean.setOrder(1);//优先级,越低越优先
        return bean;
    }
    @Bean
    public FilterRegistrationBean<Test2Filter> RegistTest2(){
        //通过FilterRegistrationBean实例设置优先级可以生效
        FilterRegistrationBean<Test2Filter> bean = new FilterRegistrationBean<Test2Filter>();
        bean.setFilter(new Test2Filter());//注册自定义过滤器
        bean.setName("flilter2");//过滤器名称
        bean.addUrlPatterns("/test/*");//过滤所有/test路径
        bean.setOrder(6);//优先级,越低越优先
        return bean;
    }
}

版权声明:本文为weixin_43453386原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。