1.创建第一个过滤器MyFilter
package com.iflytek.edu.config;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author yq
* @create 2020-07-14-11:12
**/
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) srequest;
//这边可以拿到配置类中过滤的url,然后进行处理,详细这边不再描述
System.out.println("this is MyFilter,url :"+request.getRequestURI());
//放行执行下一个过滤器
filterChain.doFilter(srequest, sresponse);
}
@Override
public void destroy() { }
}
2.创建第二个过滤器MyFilter2
package com.iflytek.edu.config;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* @author yq
* @create 2020-07-14-11:12
**/
public class MyFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) srequest;
System.out.println("this is MyFilter2,url :"+request.getRequestURI());
filterChain.doFilter(srequest, sresponse);
}
@Override
public void destroy() { }
}
3.创建过滤器配置类
package com.iflytek.edu.config;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
/**
* @author yq
* @create 2020-07-14-11:16
**/
@Configuration
public class WebConfiguration {
//多个FilterRegistrationBean自定义过滤器,bean中的名字要不一样,不然会发生只会调用优先级最高的,优先级最低的不调用
//@Bean("MyFilter") 相当于该方法中的setName()
//@Order(6)目前不起作用
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/test");//要过滤的路径
registration.setName("MyFilter"); //过滤器的名字也是web容器中的实例对象名,也可以不写这行,可以在bean注解
registration.setOrder(6);//多个过滤器的执行顺序,数字越小优先级越高
return registration;
}
//@Bean("MyFilter2") 相当于该方法中的setName()
//@Order(1)之前有看到过可以这样写,但是目前2.3测试运行编译不报错,但是不起作用
@Bean
public FilterRegistrationBean test2FilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter2());
registration.addUrlPatterns("/test");
registration.setName("MyFilter2");
registration.setOrder(1);
return registration;
}
}
4.测试发现过滤器MyFilter2比MyFilter先执行
运行控制台打印
this is MyFilter2,url :/test
this is MyFilter,url :/test