SpringBoot中没有web.xml ,无法按照Spring中的方式自定义Filter。在SpringBoot中我们需要编写声明@Configuration 注解的类,并将我们自定义的filter 通过 FilterRegistrationBean 实例添加到springboot 的过滤链中。
1 自定义filter
实现javax.servlet.Filter接口,实现 Filter 方法doFilter方法
public class UrlFilter implements Filter {
Logger logger = LoggerFactory.getLogger(UrlFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String requestURI = httpServletRequest.getRequestURI();
StringBuffer requestURL = httpServletRequest.getRequestURL();
logger.info("requestURI:" +requestURI+" "+"requestURL:"+requestURL);
filterChain.doFilter(httpServletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
2.添加@Configuration
注解,将自定义Filter加入过滤链
定义@Configuration 注解的类 并将自定义的filter 通过 FilterRegistrationBean 实例对象加入到过滤链中
2.1 FilterRegistrationBean 中方法
- setFilter 设置自定义过滤器
- setUrlPatterns 设置拦截规则
- setName 设置过滤器名称
- setOrder 设置过滤器顺序
2.2 实例代码
@Configuration
public class WebConfiguration {
@Bean
public FilterRegistrationBean testFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new UrlFilter());
List<String> urlList = new ArrayList<>();
urlList.add("/*");
registration.setUrlPatterns(urlList);
registration.setName("UrlFilter");
registration.setOrder(1);
return registration;
}
}
3.测试结果