springboot Filter过滤器的实现(注解方式)

概述

在普通的JavaEE项目中,实现过滤器后,要加上@WebFilter注解,才能生效

但是,在springboot工程中,主启动类还需要加上@ServletComponentScan注解,才能起作用

Filter过滤器类

过滤器类的实现,没有变化,还是要是实现javax.servlet.Filter 接口,这是 Servlet 的规范

例子

@WebFilter(urlPatterns = "/*", filterName = "TestFilter")
public class TestFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤器开始");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("过滤器结束");
    }

    @Override
    public void destroy() {

    }
}

该代码非常简单,就是在访问资源前打印过滤器开始,在访问资源后打印过滤器结束

修改主启动类

在启动类上加注解 @ServletComponentScan

@ServletComponentScan
@SpringBootApplication
@MapperScan("com.lvyou.mapper")
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
}

多个过滤器指定执行顺序

默认顺序

通过过滤器的类名指定执行顺序,比如2个过滤器:AuthFilter 和 TestFilter,一个首字母是A,一个首字母是T,所以先执行AuthFilter,后执行 TestFilter

无法指定顺序

通过 @Order 注解、Ordered 接口,是 不能 指定顺序的 (原本 order值越小,优先级越高,但无用)

提示:百度查的资料,均无效

注意

不能与 @Component 注解搭配使用,使用该注解,又对过滤器实例化一次,即:又创建一个过滤器对象,所以会导致过滤两次


原文出处:/show_1EF6XUszsJCM.html