spring-boot配置过滤器有三种方法

1,335 阅读1分钟

spring-boot 管理过滤器(Filter)

springboot 配置过滤器有三种方法

方法1 @Component

import javax.servlet.*;
import javax.servlet.FilterConfig;
import java.io.IOException;

@Component
public class MyFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter init ...");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       System.out.println("filter doFilter ...");
       filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("filter destroy ...");
    }
}

方法2 @Configuration

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean registerMyFilter(){
        FilterRegistrationBean<MyFilter> bean = new FilterRegistrationBean<>();
        bean.setOrder(1);
        bean.setFilter(new MyFilter());
        // 匹配"/hello/"下面的所有url
        bean.addUrlPatterns("/hello/*");
        return bean;
    }
    @Bean
    public FilterRegistrationBean registerMyAnotherFilter(){
        FilterRegistrationBean<MyFilter2> bean = new FilterRegistrationBean<>();
        bean.setOrder(2);
        bean.setFilter(new MyFilter2());
        // 匹配所有url
        bean.addUrlPatterns("/*");
        return bean;
    }
}

方法3 @WebFilter+@ServletComponentScan

//Filter类
@WebFilter(urlPatterns = "/*")
//启动类
@ServletComponentScan("自定义filter类所在的包")

Filter

@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter init ...");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       System.out.println("filter doFilter ...");
       filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("filter destroy ...");
    }
    }

启动类

@SpringBootApplication
@ServletComponentScan("com.example.demo.filter")

public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
使用方式排序指定URL
@Component (可以加上@Order 设置执行顺序)10
@WebFilter @ServletComponentScan01
JavaConfig11