Filter接口
/**
* web应用启动时,web服务器将创建Filter的实例对象,并调用init方法,读取web.xml的配置,完成对象的初始化功能,
* 从而为后续的用户请求做好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次,开发人员通过init的参数,
* 可或得代表当前filter配置信息的FilterConfig对象)
* @param filterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* 这个方法完成实际的过滤操作,当客户请求访问与过滤器相关联的URL的时候,Servlet过滤器将先执行doFilter方法,FilterChain参数用于访问后续过滤器
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
/**
* filter创建后会保存在内存中,当web应用移除或者服务器停止时才销毁,该方法在Filter的生命周期中仅执行一次,在这个方法中,可以释放过滤器使用的资源
*/
@Override
public void destroy() {
}
配置方式一:
@Slf4j
@WebFilter("/*")
public class SimpleFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("SimpleFilter is initialized.");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.info("SimpleFilter is executed");
chain.doFilter(request, response);
}
@Override
public void destroy() {
log.info("SimpleFilter is destroyed");
}
}
@SpringBootApplication
@MapperScan("com.yangqingwei.boot.test.dao")
@ServletComponentScan
public class BootTest2Application {
public static void main(String[] args) {
SpringApplication.run(BootTest2Application.class, args);
}
}
配置方式二
@Slf4j
@Component
public class TestFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.info("test filter is executed");
chain.doFilter(request, response);
}
}
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<TestFilter> testFilterFilterRegistrationBean(TestFilter testFilter) {
FilterRegistrationBean<TestFilter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(testFilter);
filterRegistrationBean.setName("testFilter");
// 过滤器执行优先级 值越小越优先
filterRegistrationBean.setOrder(1);
filterRegistrationBean.setUrlPatterns(List.of("/*"));
return filterRegistrationBean;
}
}