Widzę to w mojej aplikacji Spring MVC web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Próbuję dowiedzieć się, dlaczego tam jest i czy jest rzeczywiście potrzebny.
Znalazłem to wyjaśnienie w dokumentacji Spring, ale nie pomaga mi to zrozumieć:
Wydaje się, że komponent ten jest „spoiwem” między serwletami zdefiniowanymi w programie web.xml
a komponentami zdefiniowanymi w programie Spring applicationContext.xml
.
7.1 DelegatingFilterProxy
Korzystając z filtrów serwletów, musisz oczywiście zadeklarować je w swoim
web.xml
, w przeciwnym razie zostaną zignorowane przez kontener serwletów. W Spring Security klasy filtrów są również ziarnami Springa zdefiniowanymi w kontekście aplikacji, dzięki czemu mogą korzystać z bogatych narzędzi do wstrzykiwania zależności i interfejsów cyklu życia Springa. SpringDelegatingFilterProxy
zapewnia łącze międzyweb.xml
kontekstem aplikacji.Podczas korzystania z DelegatingFilterProxy w
web.xml
pliku zobaczysz coś takiego :<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>
Zauważ, że filtr jest w rzeczywistości a
DelegatingFilterProxy
, a nie klasą, która faktycznie implementuje logikę filtru. To, coDelegatingFilterProxy
robi, to delegowanie metod filtru do komponentu bean, który jest uzyskiwany z kontekstu aplikacji Spring. Dzięki temu bean może korzystać z obsługi cyklu życia aplikacji internetowej Spring i elastyczności konfiguracji. Fasola musi być implementowanajavax.servlet.Filter
i musi mieć taką samą nazwę, jak nazwa elementu filter-name. Przeczytaj Javadoc dla DelegatingFilterProxy, aby uzyskać więcej informacji
Więc jeśli to wyciągnę z siebie web.xml
, co się stanie? Moje serwlety nie będą w stanie komunikować się z kontenerem Spring? **