Я вижу это в своем приложении Spring MVC web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Я пытаюсь выяснить, почему он существует и нужен ли он на самом деле.
Я нашел это объяснение в документации Spring, но это не помогло мне разобраться в этом:
Кажется, предполагается, что этот компонент является "связующим звеном" между сервлетами, определенными в web.xml
, и компонентами, определенными в Spring applicationContext.xml
.
7.1 DelegatingFilterProxy
При использовании фильтров сервлетов вам, очевидно, необходимо объявить их в
web.xml
, иначе они будут игнорироваться контейнером сервлетов. В Spring Security классы фильтров также являются компонентами Spring, определенными в контексте приложения, и, таким образом, могут использовать все преимущества Spring-средств для внедрения зависимостей и интерфейсов жизненного цикла. SpringDelegatingFilterProxy
обеспечивает связь междуweb.xml
и контекстом приложения.При использовании DelegatingFilterProxy вы увидите нечто подобное в файле
web.xml
:<filter> <filter-name>myFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Обратите внимание, что фильтр на самом деле является
DelegatingFilterProxy
, а не классом, который фактически реализует логику фильтра.DelegatingFilterProxy
выполняет делегирование методов Filter через bean-компонент, который получается из контекста приложения Spring. Это позволяет компоненту воспользоваться поддержкой жизненного цикла контекста веб-приложения Spring и гибкостью настройки. Бин должен реализовыватьjavax.servlet.Filter
, и у него должно быть то же имя, что и в элементе имени фильтра. Прочитайте Javadoc для DelegatingFilterProxy для получения дополнительной информации
Итак, если я возьму это из моего web.xml
, что произойдет? Мои сервлеты не смогут связаться с контейнером Spring? **