过滤器filter的使用

95 阅读1分钟

1.方式一:

1.1 自定义filter类实现Filter接口,重写do Filter方法,在该类上增加@webFilter注解,指明过滤路径urlPatterns,这里支持正则

@WebFilter(urlPatterns = "/*")
public class LoginCheckFilter implements Filter {



    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    filterChain.doFilter(servletRequest, servletResponse);
}

1.2 启动类增加@servletComponentScan注解进行扫描

2.方式二:

2.1 自定义Filter实现Filter接口,不加任何注解

public class UserFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest,servletResponse);

    }

}

2.2 编写单独的config类来向spring boot注册该filter

@Configuration
public class UserFilterConfig {

    @Bean
    public UserFilter userFilter(){
        return new UserFilter();
    }

    @Bean(name = "userFilterConf")
    public FilterRegistrationBean userFilterConfig(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(userFilter());

        filterRegistrationBean.addUrlPatterns("/cart/*");
        filterRegistrationBean.addUrlPatterns("/order/*");

        filterRegistrationBean.setName("userFilterConfig");
        return filterRegistrationBean;
    }
}

总结:这两种方法在spring boot体系中都比较常见,当过滤逻辑较为简单时使用第一种即可,当过滤逻辑较为复杂,或项目中需要配置多个filter处理不同的过滤逻辑,可以单独设置一个config包来按照第二种方法编写单独的config来进行配置。