DelegatingFilterProxy配置在web.xml文件中是filter
ShiroFilterFactoryBean配置在applicationContext.xml文件中
要求filter-name与bean-id相同。
DelegatingFilterProxy的入口是initFilterBean方法。

会把filter-name设置给targetBeanName,所以bean-id实际要求是和targetBeanName相同,所以可以在filter标签内设置初始化参数targetBeanName和bean-id相同。
getFilterName到了GenericFilterBean类中,是DelegatingFilterProxy的父类

filterConfig在init方法中进行设置:

回到DelegatingFilterProxy的入口initFilterBean方法:


getBean就是到applicationContext容器中找到id为targetBeanName且为Filter的实现类的bean
怎么找到呢bean呢,首先ShiroFilterFactoryBean是一个工厂类,它可以创建Filter,如果我们配置filter的property的话,就可以创建。过程在ShiroFilterFactoryBean的createInstance方法中:

它会把我们的filter创建成filterchain然后执行。
参考:
网友评论