资讯动态

Spring开发系列教程(40)——添加Filter

发布时间:2026/8/18 18:11:13 来源:尧图企业网站定制
我们在Spring中已经学过了集成Filter本质上就是通过代理把Spring管理的Bean注册到Servlet容器中不过步骤比较繁琐需要配置web.xml。在Spring Boot中添加一个Filter更简单了可以做到零配置。我们来看看在Spring Boot中如何添加Filter。Spring Boot会自动扫描所有的FilterRegistrationBean类型的Bean然后将它们返回的Filter自动注册到Servlet容器中无需任何配置。我们还是以AuthFilter为例首先编写一个AuthFilterRegistrationBean它继承自FilterRegistrationBeanComponent public class AuthFilterRegistrationBean extends FilterRegistrationBeanFilter { Autowired UserService userService; Override public Filter getFilter() { setOrder(10); return new AuthFilter(); } class AuthFilter implements Filter { ... } }FilterRegistrationBean本身不是Filter它实际上是Filter的工厂。Spring Boot会调用getFilter()把返回的Filter注册到Servlet容器中。因为我们可以在FilterRegistrationBean中注入需要的资源然后在返回的AuthFilter中这个内部类可以引用外部类的所有字段自然也包括注入的UserService所以整个过程完全基于Spring的IoC容器完成。再注意到AuthFilterRegistrationBean使用了setOrder(10)因为Spring Boot支持给多个Filter排序数字小的在前面所以多个Filter的顺序是可以固定的。我们再编写一个ApiFilter专门过滤/api/*这样的URL。首先编写一个ApiFilterRegistrationBeanComponent public class ApiFilterRegistrationBean extends FilterRegistrationBeanFilter { PostConstruct public void init() { setOrder(20); setFilter(new ApiFilter()); setUrlPatterns(List.of(/api/*)); } class ApiFilter implements Filter { ... } }这个ApiFilterRegistrationBean和AuthFilterRegistrationBean又有所不同。因为我们要过滤URL而不是针对所有URL生效因此在PostConstruct方法中通过setFilter()设置一个Filter实例后再调用setUrlPatterns()传入要过滤的URL列表。本文转载自廖雪峰老师的官方网站 liaoxuefeng.com 。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价