一、Filter和interceptor的区别
Filter过滤器只依赖servlet API,不依赖Spring,它的作用是请求进入容器后,但是进入Servlet之前,对请求进行预处理, 主要是设置字符集、控制权限、控制转向、做一些业务逻辑判断等 。
拦截器是在controller代码执行之前,它主要是用于拦截用户请求并作相应的处理,比如说可以判断用户是否登录,做相关的日志记录,也可以做权限管理。
测试:
设置了两个拦截器分别为拦截器1、拦截器2,请求在过滤器和拦截器中的执行步骤如下
进入到过滤器的dofilter方法
进入拦截器1
进入拦截器2
---------开始----------
拦截器2的postHander
拦截器1的postHander
拦截器2的afterCompletion
拦截器1的afterCompletion
二、SpringBoot中如何使用过滤器
1、先定义一个Filter
class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain)
throws IOException, ServletException {
System.out.println("进入到过滤器的dofilter方法");
filterChain.doFilter(srequest, sresponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("参数初始化:"+filterConfig);
}
@Override
public void destroy() {
System.out.println("开始销毁...");
}
}
2、注册过滤器
@Configuration
public class MyWebFilter {
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new MyFilter());
//过滤掉所有请求
registration.addUrlPatterns("/*");
registration.setOrder(1);
return registration;
}
}
这样一个过滤器就定义好了。