Я вижу это в своем приложении 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 ДелегированиеFilterProxy
При использовании фильтров сервлетов вам, очевидно, нужно объявить их в вашем
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
делает, так это делегировать методы фильтра бину, который получается из контекста приложения Spring. Это позволяет компоненту использовать преимущества поддержки жизненного цикла контекста веб-приложения Spring и гибкости конфигурации. Компонент должен быть реализован,javax.servlet.Filter
и у него должно быть то же имя, что и в элементе filter-name. Прочтите Javadoc для DelegatingFilterProxy для получения дополнительной информации.
Итак, если я вытащу это из своего web.xml
, что будет? Мои сервлеты не смогут взаимодействовать с контейнером Spring? **