兩種方式
第一種通過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;
}
二者都是繼承同一個(gè)父類AbstractFilterRegistrationBean,只是DelegatingFilterProxyRegistrationBean還實(shí)現(xiàn)了ApplicationContextAware,注入了ApplicationContext實(shí)例,用于查找指定的Filter實(shí)例,最終構(gòu)建的是一個(gè)代理Filter實(shí)例(DelegatingFilterProxy);FilterRegistrationBean中維護(hù)的是目標(biāo)Filter,結(jié)果都是將Filter注冊(cè)到ServletContext中,推薦使用FilterRegistrationBean。