兩種方式
第一種通過FilterRegistrationBean
@Bean
public FilterRegistrationBean filterRegistrationBean(){
return new FilterRegistrationBean(errorPageFilter());
}
@Bean
public Filter errorPageFilter(){
ErrorPageFilter errorPageFilter = new ErrorPageFilter();
ErrorPage notFind = new ErrorPage("/404");
errorPageFilter.addErrorPages(notFind);
return errorPageFilter;
}
第二種通過DelegatingFilterProxyRegistrationBean
@Bean
public DelegatingFilterProxyRegistrationBean delegatingFilterProxyRegistrationBean(){
return new DelegatingFilterProxyRegistrationBean("errorPageFilter");
}
@Bean("errorPageFilter")
public Filter errorPageFilter(){
ErrorPageFilter errorPageFilter = new ErrorPageFilter();
ErrorPage notFind = new ErrorPage("/404");
errorPageFilter.addErrorPages(notFind);
return errorPageFilter;
}
二者都是繼承同一個父類AbstractFilterRegistrationBean,只是DelegatingFilterProxyRegistrationBean還實現了ApplicationContextAware,注入了ApplicationContext實例,用于查找指定的Filter實例,最終構建的是一個代理Filter實例(DelegatingFilterProxy);FilterRegistrationBean中維護的是目標Filter,結果都是將Filter注冊到ServletContext中,推薦使用FilterRegistrationBean。