SpringBoot2.x整合HandlerInterceptor拦截器(2-添加到容器)

JAVA && Spring && SpringBoot2.x — 学习目录

SpringBoot 关于Filter、Servlet、Listener配置—官网

1. 如何将Filter加入到SpringBoot中

1.1 扫描拦截器

在使用嵌入式容器中(内置Tomcat),类上含有@WebServlet@WebFilter@WebListener注解时,可以通过启动类上的@ServletComponentScan注解进行扫描。

需要注意的是:@ServletComponentScan 在独立容器中没有任何效果,而是使用容器的内置发现机制。

1.2. 将Filter注册为Spring Bean

任何的ServletFilter或者Listener实例都是在容器中注册的,可以使用@Component或者@Bean
默认情况下,如果上下文只包含一个Servlet,则将其映射为/,在多个Servlet bean的情况下,bean名称用作路径前缀,过滤器映射到/*

@Bean
public MyFilter getMyFilter() {    
    return new MyFilter();
}

自定义Filter通过@Bean注解后,被SpringBoot自动注册到容器的Filter chain中,并且拦截路径为/*,这样导致的结果是:所有的URL都会被自定义的Filter过滤。

可以使用ServletRegistrationBeanFilterRegistrationBean以及ServletListenerRegistrationBean类进行完全的控制。

@Bean
public FilterRegistrationBean testFilterRegistration(){
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new MyFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("MyFilter");
        registration.setOrder(1);
        return registration;
    }

2. 如何取消Filter的自动注册

Spring Boot对Filter、Servlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。

@Bean
public FilterRegistrationBean registration(MyFilter filter) {
    FilterRegistrationBean registration = new FilterRegistrationBean(filter);
    registration.setEnabled(false);
    return registration;
}

你可能感兴趣的:(SpringBoot2.x整合HandlerInterceptor拦截器(2-添加到容器))