SpringBoot过滤器(Filter)实现方式
过滤器依赖于servlet容器,属于Servlet中的一部分,实现是基于servlet的回调,生命周期也是由servlet容器管理。
方式有两种
两种无论哪一种都要写实现Filter的类
方式一写配置类@bean方式注入到容器中
1写实现类
public class CustomFilter implements Filter {
Logger logger = LoggerFactory.getLogger(CustomFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.info("CustomFilter >>>>> init");
logger.info("filterName:{}",filterConfig.getFilterName());
logger.info("getInitParameterNames():{}",filterConfig.getInitParameterNames());
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info(servletRequest.getServletContext().getContextPath());
logger.info("doFilter 》》》》》》》");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
logger.info("destroy>>>>>>>>>");
}
}
2写配置类
@Configuration
public class Config {
@Bean
public FilterRegistrationBean registrationBean(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new CustomFilter());
registrationBean.addUrlPatterns("/*");//过滤请求路径 所有请求
registrationBean.setName("customFilter");
registrationBean.setOrder(1);//值越小优先级越高
return registrationBean;
}
}
3启动日志
方式二 @WebFilter注解
写filter的实现类,主要就是又加了@Configuration 初始化容器 这个注解,会根据WebFilter生成Bean。
@Order(value = 1)//值越小优先级越高
@Configuration
@WebFilter(urlPatterns = "/*" ,filterName = "customFilter")
public class CustomFilter implements Filter {
Logger logger = LoggerFactory.getLogger(CustomFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.info("CustomFilter >>>>> init");
logger.info("filterName:{}",filterConfig.getFilterName());
logger.info("getInitParameterNames():{}",filterConfig.getInitParameterNames());
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
logger.info(servletRequest.getServletContext().getContextPath());
logger.info("doFilter 》》》》》》》");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
logger.info("destroy>>>>>>>>>");
}
}