前言
现在很多项目都会带过滤器,那么spring boot怎么实现过滤器并且实现多个过滤器的功能呢,下面就实现一下
一、创建过滤器
1.新建两个过滤器类
继承Filter接口并实现它的三个方法,请求进入doFilter方法
过滤器1
import javax.servlet.*;
import java.io.IOException;
public class Filters1 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("进入过滤器1");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
过滤器2
import javax.servlet.*;
import java.io.IOException;
public class Filters2 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("进入过滤器2");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
2.配置过滤器
通过@Bean的方式配置两个过滤器,并在属性setOrder内传入优先级
import com.example.demo.security.Filters1;
import com.example.demo.security.Filters2;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Filterconf {
@Bean
public FilterRegistrationBean registFilter1()
{
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new Filters1());//注册自定义过滤器
registration.addUrlPatterns("/*");//过滤所有路径
registration.setName("LogCostFilter1");//过滤器名称
registration.setOrder(1);//优先级,最顶级
return registration;
}
@Bean
public FilterRegistrationBean registFilter2()
{
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new Filters2());//注册自定义过滤器
registration.addUrlPatterns("/*");//过滤所有路径
registration.setName("LogCostFilter2");//过滤器名称
registration.setOrder(2);//优先级,最顶级
return registration;
}
}
3.新建一个控制器
当请求经过过滤器后,即可抵达Controller
@RestController
public class TestController {
@RequestMapping(value = "/test1")
public void Function()
{
System.out.println("Controller");
}
}
二、测试过滤器
1.启动项目
在浏览器输入http://localhost:8080/test1,看到编译器日志输出的结果即可体现出请求先经过Filter1再经过Filter最后经过Controller