DelegatingFilterProxy如何知道要调用哪个过滤器来委托doFilter调用?

时间:2019-08-09 13:21:47

标签: spring spring-boot spring-security servlet-filters spring-filter

从Spring的Java文档中,web.xml通常将包含一个DelegatingFilterProxy定义,其指定的过滤器名称与Spring的根应用程序上下文中的bean名称相对应。

DelegatingFilterProxy是否使用反射来了解其对象的名称,并使用此名称来查找filterchainproxy bean的名称,从而将请求委托给正确的filterchain类?

(但是那两个同名的豆不会冲突吗?)

1 个答案:

答案 0 :(得分:2)

  

DelegtaingFilterProxy是否使用反射来了解其名称   对象并使用该名称查找filterchainproxy bean的名称   从而将请求委托给正确的filterchain类?

不是。它仅查询Spring ApplicationContext返回一个名称与<filter-name>中配置的名称相同的bean,最后将其归结为调用:

Filter filter = applicationContext.getBean(targetBeanName, Filter.class);

在幕后,它不需要使用反射来通过bean名称获取bean,因为在内部Spring会在地图中通过其bean名称索引所有Singleton bean,因此按其名称查找bean只是一个关键从这张地图上查找。

  

但是然后不会有两个同名的豆发生冲突

你是对的。这就是为什么如果您定义两个具有相同名称的bean,Spring会抛出异常,并且无法启动。