example - ¿Qué hace doFilter en el método doFilter en los filtros de java?
servlet filter login (6)
Al llamar a chain.doFilter, está entregando la solicitud / respuesta al siguiente filtro en su cadena de filtros. Si no lo llama, no se ejecutará el siguiente filtro (probablemente definido en su web.xml).
Si acabas de llamar a doFilter, entonces sí, tendrías recursion interminable y un stackoverflow. Sin embargo, está llamando al método doFilter del objeto filterChain, que le indica que ejecute el siguiente filtro.
Quiero saber que en nuestro método de dofilter hice esta llamada chain.doFilter . ¿Qué hace doFilter dentro de un doFilter? ¿No recibirá una llamada recursiva?
Al no tener ningún código del que estés hablando, solo puedo darte por hecho algo como:
class Filter implements FilterAPI {
private FilterAPI chain;
FilterAPI(FilterAPI chain) { this.chain = chain; }
@override void doFilter (Set setToFilter) {
// do some filtering on setToFilter
chain.doFilter(setToFilter);
}
}
Si ese es el caso, entonces no está llamando nada recursivamente, está llamando a doFilter () en un objeto diferente. Como se mencionó en otra respuesta, este es el conocido patrón de diseño de Cadena de Responsabilidad.
Está llamando al método doFilter
del objeto en chain
, no a sí mismo, por lo que no, no será recursivo.
La chain
nombres sugiere que tiene una secuencia de filtros, con cada filtro procesando y luego pasando a la siguiente en secuencia, de modo que cada objeto tiene un miembro de la chain
para apuntar al siguiente filtro en la secuencia, que se llama después del el filtro ha realizado su propio procesamiento. El último en la secuencia probablemente tendrá un null
como el valor de la chain
, o sabe por sí mismo que es el último en la secuencia.
Internamente, invoca doFilter
del siguiente filtro en la cadena de filtros y, cuando la cadena termina, invoca el servlet de destino.
Los filtros de servlets son una implementación del patrón de diseño de Cadena de responsabilidad .
Todos los filtros están encadenados (en el orden de su definición en web.xml). chain.doFilter()
avanza al siguiente elemento de la cadena. El último elemento de la cadena es el recurso / servlet de destino.
Provoca que se invoque el siguiente filtro en la cadena, o si el filtro que llama es el último filtro en la cadena, hace que se invoque el recurso al final de la cadena.