Principio de filtro de Java, interceptor, filtro, diferencias de escucha y orden de ejecución

Este artículo cita el contenido del trabajo del autor ( Huakai Pinellia ). Creo que está bien escrito. Lo grabaré para revisarlo fácilmente y evitar que desaparezca. Para obtener más detalles, consulte al autor original.
Al mismo tiempo, también hemos recopilado otras publicaciones de blog que son fáciles de entender. Si está interesado, puede echar un vistazo para promover la comprensión de los interceptores, filtros
y secuencias de ejecución de oyentes (filtros personales interceptados)
https://javaforall .cn/128546.html
Esta es la parte trasera del pequeño salón de clases de Cultivation Academy, todas las oraciones compartidas provienen de aquí.

[Introducción a los antecedentes] [Análisis del conocimiento] [Preguntas frecuentes] [Soluciones] [Práctica de codificación] [Expansión del pensamiento] [Más discusiones] [Referencias]

Análisis en profundidad de los conocimientos/habilidades de back-end desde 8 aspectos. Lo que comparte este artículo es:

[¿Cuáles son las funciones de los interceptores, filtros y oyentes respectivamente?

Hola. Soy un estudiante de la décima generación de la sucursal de Zhengzhou de IT Cultivation Academy, un programador JAVA honesto, puro y de buen corazón.

Hoy me gustaría compartir con ustedes la tarea 5 de JAVA del sitio web oficial de Cultivation Academy, puntos de conocimiento para ampliar su pensamiento: ¿cuáles son las funciones de los interceptores, filtros y oyentes?

1. Introducción a los antecedentes

1.Filtro

Depende del contenedor de servlet. Aunque la implementación puede filtrar casi todas las solicitudes en función de las devoluciones de llamadas de funciones, su desventaja es que solo se llama a una instancia de filtro cuando se inicializa el contenedor. El propósito de utilizar un filtro es realizar operaciones de filtrado, como cambiar códigos de caracteres en el filtro para obtener los datos deseados. Cambie algunos parámetros de la solicitud del servlet http en el filtro. Esto incluye filtrado de texto vulgar, texto peligroso, etc.

2.interceptor

Depende del marco web, en SpringMVC depende del marco SpringMVC. La reflexión basada en Java en la implementación es una operación de programación orientada a sectores (AOP). El interceptor se basa en la llamada del marco web, por lo que puede utilizar la multiplexación dependiente de Spring para realizar algunas operaciones comerciales. Además, las instancias del interceptor se pueden llamar varias veces durante el ciclo de vida del controlador. Sin embargo, su desventaja es que solo puede bloquear solicitudes del controlador, pero no otras solicitudes, como el acceso directo a recursos estáticos.

3.Oyente

Un oyente web es una clase especial de servlets que ayuda a los desarrolladores a monitorear eventos específicos en la web. El programa del lado del servidor que implementa la interfaz javax.servlet.servletcontextlistener se inicia cuando se inicia la aplicación web APP, solo se inicializa una vez y se destruye cuando se detiene la aplicación web APP. La función principal es detectar la inicialización y los cambios en propiedades, como solicitudes, sesiones y aplicaciones.

2. Análisis del conocimiento

1. Uso de interceptores

Usado en el proyecto: configurado en la clase springMVC.xml que implementa la interfaz

El filtro implementa HandlerInterceptor o WebRequestInterceptor y utiliza los métodos prehandle(...), postHandle) y afterCompletion) apropiados.

(1) Se llama al método preHandle antes de procesar la solicitud. Por lo tanto, puede utilizar este método para realizar algunas operaciones de preinicialización, preprocesar la solicitud actual o utilizar este método para hacer algunos juicios y determinar si continuar con la solicitud. El valor de retorno de este método es de tipo booleano. Devolver falso indica que la solicitud finalizará y el Interceptor y el Controlador posteriores ya no se ejecutarán. Si el valor de retorno es verdadero, continúe llamando al siguiente método de control previo del interceptor; si es el último interceptor, llame al método del controlador de la solicitud actual:

)2) El método postHandle, como su nombre lo indica, se ejecuta después de procesar la solicitud actual, es decir, después de llamar al método del controlador, pero antes de que el servlet del despachador devuelva la vista para renderizar, por lo que este método

)3) Una vez completada toda la solicitud, es decir, después de que DispatcherServlet muestre la vista correspondiente, ejecute el método afterCompletion. El objetivo principal de este método es organizar los recursos.

2. Usa filtros

Usado en el proyecto: Escribe la configuración en la clase web.xml que implementa la interfaz.

El filtro solo necesita implementar javax.servlet.filter y anular el método dofilter(...), init), destroy)

Implemente el método doFilter para completar el filtrado de solicitudes o respuestas.

Implemente el método init y lea los parámetros de inicialización del filtro.

destruir (), realizar ciertas operaciones al destruir el filtro

3. Utilice un oyente

Usado en el proyecto: configurado en la clase springMVC.xml que implementa la interfaz

Existen principalmente cuatro u ocho tipos de interfaces de escucha, que pueden monitorear la generación, destrucción y cambios de atributos de dominios de solicitud, dominios de sesión y dominios de aplicación.

Crea un objeto de escucha:

)1) ServletContext: monitorea principalmente la creación de servletContext y necesita implementar la interfaz ServeltContextListener;

)2) ServletRequest: monitorea principalmente la creación de solicitudes y necesita implementar la interfaz ServletRequestListener;

)3) Sesión http: principalmente necesita monitorear la creación de la sesión e implementar la interfaz de escucha de la sesión http.

Recibir cambios de propiedad:

)1) ServletContext: principalmente necesita interceptar la modificación, adición y eliminación de atributos de servletContext e implementar la interfaz ServeltContextAttrbuteListener;

)2) solicitud de servlet: monitorea principalmente
el cambio, adición y eliminación del atributo t de solicitud y necesita implementar la interfaz ServletRequestAttrbuteListener; (3) HttpSession: monitorea principalmente el cambio, adición y eliminación del atributo de sesión y necesita para implementar la interfaz HttpSessionAttrbuteListener.

Monitoreo de la activación y pasivación de la sesión: httpSessionActivationListener monitorea principalmente la activación y pasivación de la sesión.

Supervise el enlace entre la sesión y el objeto: httpSessionBindingListener supervisa el enlace entre la sesión y el objeto.

3. Problemas comunes y soluciones

¿Cuál es la diferencia entre interceptores, filtros y oyentes?

1. Desde el punto de vista de la preocupación: el filtro intercepta solicitudes web en el alcance del filtro y realiza los cambios correspondientes en cierta información, el oyente actúa sobre el monitoreo de los parámetros a nivel del sistema y generalmente no realiza cambios.

2. En términos de soporte soportado: los interceptores requieren soporte Spring, los filtros y oyentes requieren soporte servlet.

3. Diferentes escenarios de aplicación

(1) Interceptor: intercepta registros sin inicio de sesión, auditorías, etc.;

(2) Filtro: establezca codificación de caracteres, control de acceso a permisos a nivel de URL, filtre palabras confidenciales, comprima información de respuesta, etc.;

(3) Oyente: cuenta la cantidad de personas en línea y borra las sesiones caducadas.

4. Práctica de codificación

Vea el vídeo para más detalles.

5. Pensamiento ampliado

1. Orden de ejecución de interceptores, filtros y oyentes.

Oyentes > Filtros > Interceptores > ejecución de servlet > Interceptores > Filtros > Oyentes

2. Orden de ejecución de múltiples interceptores (dos)

(1) Cuando ambos interceptores implementan operaciones de liberación, el orden es preHandle 1, preHandle 2, postHandle 2, postHandle 1, afterCompletion 2, afterCompletion 1;

(2) Cuando el primer interceptor preHandle devuelve falso, es decir, cuando es interceptado, el segundo interceptor no se ejecuta en absoluto y el primer interceptor solo ejecuta la parte preHandle;

(3) Cuando el primer interceptor preHandle devuelve verdadero, el segundo interceptor preHandle devuelve falso, el orden es preHandle 1, preHandle 2, afterCompletion 1.

3. Orden de ejecución de múltiples filtros.

El servidor web determina qué filtro llamar primero según el orden de registro de los filtros en web.xml. Cuando se llama al método doFilter del primer filtro, el servidor web creará un objeto FilterChain que representa la cadena de filtros y lo pasará al método. . En el método doFilter, si el desarrollador llama al método doFilter del objeto FilterChain, el servidor web comprobará si hay otro filtro en el objeto FilterChain. Si lo hay, se llamará al segundo filtro. Si no, el recurso de destino sera llamado.

4. Orden de ejecución de múltiples oyentes.

Si hay varios oyentes en un webServlet, los oyentes del servlet se cargan y registran en el orden en que se cargan.

7. Más discusión

1. ¿Cómo utilizar anotaciones personalizadas para implementar interceptores?

Primero necesitas definir una anotación personalizada.

@Destino(TipoElemento.MÉTODO)

@Retención(RetentionPolicy.RUNTIME)

público @interfaz AccesoRequerido {

}

ElementType.METHOD aquí significa que es válido para el método

Política de retención.RUNTIME

Generalmente, si necesita obtener información de anotaciones dinámicamente en tiempo de ejecución, solo puede utilizar anotaciones RUNTIME.

Luego, al escribir su propio interceptor, también deberá configurarlo en el archivo web.xml.

Finalmente, marque el método que debe interceptarse con una anotación personalizada para indicar que este método debe interceptarse.

2. Si no ha iniciado sesión o no es VIP, ¿puede intentar resolver el problema en 10 minutos?

Divida el video en segmentos: los primeros diez minutos son una solicitud, luego se realiza nuevamente la solicitud y se intercepta la solicitud posterior.

3. La diferencia entre interceptores y filtros:

(1) El interceptor se basa en el mecanismo de reflexión de Java, mientras que el filtro se basa en devoluciones de llamadas de funciones.

(2) El interceptor no depende del contenedor de servlet, pero el filtro depende del contenedor de servlet.

(3) Los interceptores solo pueden funcionar con solicitudes de acción, mientras que los filtros pueden funcionar con casi todas las solicitudes.

(4) Los interceptores pueden acceder a objetos en el contexto de acción y la pila de valores, pero los filtros no.

(5) En el ciclo de vida de la acción, el interceptor se puede llamar varias veces, pero el filtro solo se puede llamar una vez cuando se inicializa el contenedor.

Supongo que te gusta

Origin blog.csdn.net/m0_46364149/article/details/127103963
Recomendado
Clasificación