【2019】Spring boot 过滤器Filter的定义及配置

Filter 的使用和Spring boot 定义配置拦截器Interceptor很像,特别要注意点是过滤规则的书写

Spring boot Filter定义

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

SpringMVC 中是怎样,这里就怎样,区别在于配置文件。

Spring boot Filter配置

配置类代码建议如下写,避免出现 null 的情况。和一样。

/**
 * Created by guozhaohui628@gmail.com on 2019/1/7
 * Description:
 */
@Configuration
public class MyFilterConfig {

    @Bean
    public MyFilter getMyFilter(){
        return new MyFilter();
    }

    @Bean
    public FilterRegistrationBean authFilterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setName("myFilter");
        MyFilter myFilter = getMyFilter();
        registrationBean.setFilter(myFilter);
        registrationBean.setOrder(1);
        List<String> urlList = new ArrayList<String>();

        //1
        //urlList.add("/*");

        //2
//        urlList.add("/query_equip_business_policy");
//        urlList.add("/query_start_charge");
//        urlList.add("/query_station_info");
//        urlList.add("/query_station_status");
        registrationBean.setUrlPatterns(urlList);
        return registrationBean;
    }

}

过滤规则如上有两种情况,首先第一种过滤所有地址。这样配置要注意,因为没看到 Spring boot 怎样处理静态资源。搜遍很多博客,都没提。搜索关键字 「spring boot filter 静态资源」

当过滤器和拦截器同时存在时,先通过 过滤器 在经过拦截器

此种情况下,如果项目是前后端分离,倒是无所谓。匹配到过滤规则后,通过在过滤器方法中判断想要放行的地址url即可。

还有种办法也就是如上第二种,一个个想要维护过滤的地址添加到集合中,静态资源不进行维护。

ok ,过滤器的书写就是纯粹 Java 知识,不涉及 Spring boot 留着下篇大餐总结出来,因为下篇关于 token 的代码就涉及到过滤器。

本文由老郭种树原创,转载请注明:https://guozh.net/2019spring-boot-guolvqifilterdedingyijipeizhi/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注