В чем разница между FilterRegistrationBean и DelegatingFilterProxy? - PullRequest
0 голосов
/ 06 мая 2019

Это разные способы регистрации фильтра, FilterRegistrationBean предоставляет возможность заказа. DelegatingFilterProxy используется в качестве прокси для регистрации фильтров, но как FilterRegistrationBean регистрирует фильтр? В чем разница между обоими регистрационными фильтрами в контейнерах сервлетов.

Spring boot использует FilterRegistrationBean, но не DelegatingFilterProxy, почему?

Добавляет ли FilterRegistrationBean фильтр непосредственно как фильтр сервлета, или он также использует реализацию, подобную DelegatingFilterProxy?

Ответы [ 2 ]

1 голос
/ 06 мая 2019

[DelegatingFilterProxy] используется для настройки Filter в контексте вашего приложения и выполнения сопоставления URL в web.xml или замены.Он выполнит поиск фильтра в ApplicationContext и выполнит настроенный Filter.Этот класс также является частью Spring Framework.Это также сам сервлет Filter, так как он действует как прокси для фактического Filter экземпляра, настроенного в ApplicationContext.

FilterRegistrationBean, как следует из названия, bean-компонент, используемый для обеспечения конфигурации для регистрации Filter экземпляров.Он может использоваться для предоставления таких вещей, как сопоставления URL-адресов и т. Д. Это дополнительный компонент конфигурации, используемый Spring Boot, так что он может добавить Filter, на который ссылается FilterRegistrationBean, который может быть зарегистрирован (или нет!) Как часть фильтра.цепь.

0 голосов
/ 06 мая 2019

FilterRegistrationBean - это Spring Bean, который помогает вам регистрировать фильтры.

DelegatingFilterProxy - это сам фильтр.Он может быть зарегистрирован в ServletContext с помощью, например, FilterRegistrationBean, как показано ниже:

@Bean
public FilterRegistrationBean filterChainRegistration() {
DelegatingFilterProxy filterProxy = new DelegatingFilterProxy();
filterProxy.setTargetBeanName(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME);
FilterRegistrationBean registrationBean = new FilterRegistrationBean(delegatingFilterProxy);
registrationBean.setName(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME);
 registrationBean.addUrlPatterns("/*");
return registrationBean;
}

РЕДАКТИРОВАТЬ:

С Spring Documentation : «ServletContextInitializer для регистрации фильтров в контейнере Servlet 3.0+. Аналогичен функциям регистрации, предоставляемым ServletContext, но с дружественным дизайном Spring Bean. Фильтр должен быть указан перед вызовом RegistrationBean.onStartup (ServletContext). Регистрации могут быть связаны с URLшаблоны и / или сервлеты (либо по имени, либо через ServletRegistrationBeans. Если шаблон URL или сервлеты не указаны, фильтр будет связан с '/ *'. Имя фильтра будет выведено, если оно не указано. ".

...