0.引言
在web项目中写过滤器时,若想使用sprng的某些功能,可以通过DelegatingFilterProxy类来实现,该类相当于一个代理类,它会通过配置的filter-name的值去spring容器中找到对应的bean,并且执行对应的过滤逻辑。
1.使用方式
<filter>
<filter-name>filter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>
2.源码解析
通过类关系图可知,DelegatingFilterPorxy是一个过滤器,那么它是如何调用spring容器中的bean来执行操作的呢?
1.执行过滤器的init方法
DelegatingFilterProxy类中并没有init方法的实现,该实现在他的父类GenericFilterBean当中,在父类中找到该方法。
GenericFilterBean.class
public final void init(FilterConfig filterConfig) throws ServletException {
Assert.notNull(filterConfig, "FilterConfig must not be null");
if (logger.isDebugEnabled()) {
logger.debug("Initializing filter '" + filterConfig.getFilterName() + &