Je vois cela dans mes applications Spring MVC web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
J'essaie de comprendre pourquoi c'est là et si c'est vraiment nécessaire.
J'ai trouvé cette explication dans la documentation de Spring mais cela ne m'aide pas à comprendre:
Il semble suggérer que ce composant est le "ciment" entre les servlets définis dans web.xml
et les composants définis dans Spring applicationContext.xml
.
7.1 DelegatingFilterProxy
Lorsque vous utilisez des filtres de servlet, vous devez évidemment les déclarer dans votre
web.xml
, sinon ils seront ignorés par le conteneur de servlet. Dans Spring Security, les classes de filtre sont également des beans Spring définis dans le contexte de l'application et donc capables de tirer parti des riches fonctionnalités d'injection de dépendances et des interfaces de cycle de vie de Spring. Spring'sDelegatingFilterProxy
fournit le lien entreweb.xml
et le contexte de l'application.Lorsque vous utilisez DelegatingFilterProxy, vous verrez quelque chose comme ceci dans le
web.xml
fichier:<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>
Notez que le filtre est en fait un
DelegatingFilterProxy
, et non la classe qui implémentera réellement la logique du filtre. Ce quiDelegatingFilterProxy
fait est de déléguer les méthodes du filtre à un bean qui est obtenu à partir du contexte d'application Spring. Cela permet au bean de bénéficier de la prise en charge du cycle de vie du contexte de l'application Web Spring et de la flexibilité de configuration. Le bean doit implémenterjavax.servlet.Filter
et il doit avoir le même nom que celui de l'élément filter-name. Lisez le Javadoc pour DelegatingFilterProxy pour plus d'informations
Donc, si je retire cela de mon web.xml
, que va-t-il se passer? Mes servlets ne pourront pas communiquer avec le conteneur Spring? **