首先在SpringBoot启动类中加注解:@ServletComponentScan(“org.hx.springboot_filter_demo22”)
第一种方式:使用@WebFilter注解,优点:可以指定过滤器拦截的路径,缺点:无法指定FIlter的优先级。
package org.hx.springboot_filter_demo22;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class MyFilter01 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter01");
filterChain.doFilter(servletRequest,servletResponse);
}
}
第二种方式:通过@Component和@Order(99)实现,优点:可以指定FIlter的优先级,缺点:拦截的是所有的请求,不能配具体拦截谁。
package org.hx.springboot_filter_demo22;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@Component
@Order(99)
public class MyFilter02 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter02");
filterChain.doFilter(servletRequest,servletResponse);
}
}
package org.hx.springboot_filter_demo22;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import java.io.IOException;
@Component
@Order(100)
public class MyFilter03 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter03");
filterChain.doFilter(servletRequest,servletResponse);
}
}
第三种方式:通过新建一个配置类:FilterConfig类,这种方式既可以拦截具体路径,又可以指定优先级。
package org.hx.springboot_filter_demo22;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter04 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter04");
filterChain.doFilter(servletRequest,servletResponse);
}
}
package org.hx.springboot_filter_demo22;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter05 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("MyFilter05");
filterChain.doFilter(servletRequest,servletResponse);
}
}
package org.hx.springboot_filter_demo22;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Arrays;
@Configuration
public class FilterConfig {
@Bean
FilterRegistrationBean<MyFilter04> myFilter04FilterRegistrationBean(){
FilterRegistrationBean<MyFilter04> bean = new FilterRegistrationBean<>();
bean.setOrder(90);
bean.setFilter(new MyFilter04());
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
@Bean
FilterRegistrationBean<MyFilter05> myFilter05FilterRegistrationBean(){
FilterRegistrationBean<MyFilter05> bean = new FilterRegistrationBean<>();
bean.setOrder(89);
bean.setFilter(new MyFilter05());
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}