Vejo isso nos meus aplicativos Spring MVC web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Estou tentando descobrir por que está lá e se é realmente necessário.
Encontrei essa explicação nos documentos do Spring, mas isso não me ajuda a entender:
Parece sugerir que esse componente é a "cola" entre os servlets definidos em web.xml
e os componentes definidos na primavera applicationContext.xml
.
7.1 DelegatingFilterProxy
Ao usar filtros de servlet, obviamente você precisa declará-los no seu
web.xml
, ou eles serão ignorados pelo contêiner do servlet. No Spring Security, as classes de filtro também são Spring beans definidas no contexto do aplicativo e, portanto, capazes de tirar proveito dos ricos recursos de injeção de dependências e interfaces do ciclo de vida do Spring. O Spring'sDelegatingFilterProxy
fornece o link entreweb.xml
e o contexto do aplicativo.Ao usar o DelegatingFilterProxy, você verá algo assim no
web.xml
arquivo:<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>
Observe que o filtro é realmente uma
DelegatingFilterProxy
classe, e não a classe que realmente implementará a lógica do filtro. O queDelegatingFilterProxy
faz é delegar os métodos do Filter através de um bean que é obtido no contexto do aplicativo Spring. Isso permite que o bean se beneficie do suporte ao ciclo de vida do contexto do aplicativo da web Spring e da flexibilidade de configuração. O bean deve ser implementadojavax.servlet.Filter
e deve ter o mesmo nome que o do elemento filter-name. Leia o Javadoc para DelegatingFilterProxy para obter mais informações
Então, se eu tirar isso da minha web.xml
, o que vai acontecer? Meus servlets não poderão se comunicar com o contêiner Spring? **