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 设置执行顺序) | 1 | 0 |
| @WebFilter @ServletComponentScan | 0 | 1 |
| JavaConfig | 1 | 1 |