添加Filter
在Spring Boot中,添加一个Filter
更简单了,可以做到零配置。我们来看看在Spring Boot中如何添加Filter
。
Spring Boot会自动扫描所有的FilterRegistrationBean
类型的Bean,然后,将它们返回的Filter
自动注册到Servlet容器中,无需任何配置。
FilterRegistrationBean
本身不是Filter
,它实际上是Filter
的工厂。Spring Boot会调用getFilter()
,把返回的Filter
注册到Servlet容器中。因为我们可以在FilterRegistrationBean
中注入需要的资源,然后,在返回的中,这个内部类可以引用外部类的所有字段,自然也包括注入的UserService
,所以,整个过程完全基于Spring的IoC容器完成。
再注意到AuthFilterRegistrationBean
标记了一个@Order(10)
,因为Spring Boot支持给多个Filter
排序,数字小的在前面,所以,多个Filter
的顺序是可以固定的。
@Order(20)
public class ApiFilterRegistrationBean extends FilterRegistrationBean<Filter> {
@PostConstruct
public void init() {
}
class ApiFilter implements Filter {
...
}
这个ApiFilterRegistrationBean
和AuthFilterRegistrationBean
又有所不同。因为我们要过滤URL,而不是针对所有URL生效,因此,在@PostConstruct
方法中,通过setFilter()
设置一个Filter
实例后,再调用setUrlPatterns()
传入要过滤的URL列表。
从下载练习:添加Filter并指定顺序 (推荐使用快速下载)