|
现在借助servlet中的接口Filter定义三个filter
public class MyFilter1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println(filterConfig.getInitParameter("a"));//获取参数值
System.out.println("执行Controller前的MyFilter1-init处理");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行Controller前的MyFilter1-doFilter处理");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("执行Controller后的MyFilter1-doFilter处理");
}
@Override
public void destroy() {
System.out.println("执行Controller前的MyFilter1-destroy处理"); //项目停止的时候执行
}
}
public class MyFilter2 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("执行Controller前的MyFilter2-init处理");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行Controller前的MyFilter2-doFilter处理");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("执行Controller后的MyFilter2-doFilter处理");
}
@Override
public void destroy() {
System.out.println("执行Controller前的MyFilter2-destroy处理");//项目停止的时候执行
}
}
public class MyFilter3 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("执行Controller前的MyFilter3-init处理");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行Controller前的MyFilter3-doFilter处理");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("执行Controller后的MyFilter3-doFilter处理");
}
@Override
public void destroy() {
System.out.println("执行Controller前的MyFilter3-destroy处理");//项目停止的时候执行
}
}
现在利用FilterRegistrationBean对这三个filter进行注册
@Configuration
public class MyFilterConfig {
@Bean
public FilterRegistrationBean FilterRegistrationBean1(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.addInitParameter("a","a"); //对filter传递参数,filter可以通filterConfig来获取
bean.addInitParameter("b","b");
bean.addInitParameter("c","c");
bean.setFilter(new MyFilter1());
bean.addUrlPatterns("/*");//设置需过滤的路径
bean.setName("filter1");
bean.setOrder(1);//对order进行排序,数字越小的越先执行
return bean;
}
@Bean
public FilterRegistrationBean FilterRegistrationBean2(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new MyFilter2());
bean.addUrlPatterns("/*");
bean.setName("filter2");
bean.setOrder(2);
return bean;
}
@Bean
public FilterRegistrationBean FilterRegistrationBean3(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new MyFilter3());
bean.addUrlPatterns("/*");
bean.setName("filter3");
bean.setOrder(3);
return bean;
}
}
注意:如果order都没有声明(order的默认值是2147483647):则按加载的顺序,从上至下,依次执行
定义controlle:
@RestController
public class IndexController {
@RequestMapping(value="/")
public String index(){
return "index";
}
}
启动代码:
@SpringBootApplication
public class ShiroPac4jTestApplication {
public static void main(String[] args) {
SpringApplication.run(ShiroPac4jTestApplication.class, args);
}
}
配置文件为:
server.port=8089
项目启动的时候,打印出日志:
执行Controller前的MyFilter1-init处理
执行Controller前的MyFilter2-init处理
执行Controller前的MyFilter3-init处理
请求http://localhost:8089/的时候,打印出日志:
执行Controller前的MyFilter1-doFilter处理
执行Controller前的MyFilter2-doFilter处理
执行Controller前的MyFilter3-doFilter处理
执行Controller后的MyFilter3-doFilter处理
执行Controller后的MyFilter2-doFilter处理
执行Controller后的MyFilter1-doFilter处理

加入filter中filterChain.doFilter(servletRequest,servletResponse);没有写则

则打印日志为:
执行Controller前的MyFilter1-doFilter处理
执行Controller前的MyFilter2-doFilter处理
执行Controller后的MyFilter2-doFilter处理
执行Controller后的MyFilter1-doFilter处理
|