SpringBoot:自定义Filter

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 urlList = new ArrayList<>();
        urlList.add("/*");
        registration.setUrlPatterns(urlList);
        registration.setName("UrlFilter");
        registration.setOrder(1);
        return registration;
    }
}

3.测试结果

 

 

 

 

 

 

 

 

你可能感兴趣的:(SpringBoot学习笔记)