过滤器对web资源进行拦截过滤后,在将资源交给下个过滤器或servlet
过滤器的生命周期
过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法.
当Filter被移除或服务器正常关闭时,会执行destroy方法
过滤器在springboot的两种配置方式
一种通过@WebFilter,将过滤器组件注册到spring容器内
一种通过spring配置文件
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean registrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
过滤例子
package org.utils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;
@WebFilter(urlPatterns = "/*",dispatcherTypes = {DispatcherType.REQUEST},
initParams = {@WebInitParam(name = "charset",value = "utf-8")})
public class FirstFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("doFilter");
// 放行请求
filterChain.doFilter(servletRequest,servletResponse);
// 但请求走完,会回来这里
System.out.println("doFilter回来了");
}
@Override
public void destroy() {
System.out.println("destory");
}
}