filter - last - struts 2 pdf
Filtros vs Interceptores en Struts 2 (6)
¿Cuál es la diferencia, realmente, entre filtros e interceptores? Me doy cuenta de que los interceptores disparan antes y después de una acción, recursivamente, y los filtros se pueden configurar para disparar acciones y en ciertos patrones de URL. ¿Pero cómo sabes cuándo usar cada uno?
En el libro que estoy leyendo en Struts 2, parece que los interceptores están siendo empujados e incluso seguí un tutorial para escribir un Interceptor de autenticación para asegurarme de que el usuario está conectado. Sin embargo, si el usuario intenta acceder a una URL que no responde No tengo una acción asociada, el interceptor no lo detecta, lo que significa que tendría que asociar una acción con cada jsp que quiero que sea segura. Eso no parece correcto.
Puedo hacer un filtro de autenticación que maneje direcciones URL para que no tenga que hacer eso, pero entonces, ¿qué sentido tienen los interceptores?
la pila del interceptor dispara en cada solicitud.
los filtros solo se aplican a las URL para las que están definidos.
editar: usa uno u otro dependiendo de la necesidad. Supongamos que necesita verificar que haya una cookie presente para cada solicitud. Usuario un interceptor. Digamos que necesita abrir una aplicación externa en algunas solicitudes (impulsada por una url), use un filtro.
Creo que los interceptores son la herramienta más comúnmente utilizada ...
¿por qué tendrías una url sin acción asociada?
¿Qué es Interceptor?
El Framework Struts 2 utiliza el concepto de Interceptores para compartir la solución de algunas inquietudes comunes mediante diferentes acciones.
Como sabemos, el marco invoca un objeto de acción particular en la submisión de una solicitud para ello. Pero antes de ejecutar Action, la invocación es interceptada por otro objeto para proporcionar el procesamiento adicional requerido.
De manera similar, después de la ejecución de Acción, la invocación puede ser interceptada nuevamente. Este objeto de interceptación se conoce como Interceptor.
Por lo tanto, el uso de Interceptor es para permitir un mayor control sobre la capa del controlador y separar algunas lógicas comunes que se aplican a múltiples acciones.
El marco de Struts 2 ya ha proporcionado su propio conjunto de interceptores que se pueden utilizar en la aplicación para proporcionar el procesamiento requerido antes y después de la ejecución de las clases de acción.
Uno de ellos es "Alias Interceptor" que voy a tratar aquí.
Interceptor Alias:
Alias Interceptor se usa en caso de encadenamiento de acción. Encadenamiento de acción significa que una Acción llama a otra Acción después de la ejecución exitosa de la primera acción.
Este interceptor alias un parámetro con nombre a un nombre de parámetro diferente. En el encadenamiento de acción, cuando dos clases de acción diferentes comparten un parámetro común con un nombre diferente, este Interceptor se utiliza para dar un nombre de alias a un parmetro de la primera clase de acción, que coincide con el nombre del parámetro en la segunda clase de acción.
La expresión de acción alias debe tener la forma de:
#{ ''name1'' : ''alias1'' , ''name2'' : ''alias2'' }
La diferencia más significativa es que los "interceptores" forman parte del marco de Struts 2 y solo son parte del manejo de las solicitudes que realiza el marco de Struts 2. "Filtros" por otro lado son una parte de la especificación del servlet; en otras palabras, son parte de la API de Servlet. Si está utilizando Struts 2, debe usar interceptores para envolver la funcionalidad de sus acciones de Struts 2. Si está tratando de ajustar la funcionalidad a las solicitudes que llegan a su aplicación web, pero Struts 2 no las maneja, un filtro podría ser más apropiado.
Por cierto, todo el Struts 2 Framework se implementa dentro de un filtro configurado en su aplicación web, declarado en el descriptor de implementación de su aplicación web (web.xml) como:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Este filtro, que está configurado para capturar todas las solicitudes de patrones de URL, es el punto de entrada a todo el marco de Struts 2.
Espero que eso ayude.
Según los struts 2 ciclo de vida / arquitectura, no se ejecutan interceptores antes del filtro. Entonces, si no hay un mapeo de acción para su solicitud, se está produciendo un error al pasar por el filtro.
Struts 2 Framework no depende de Servlet API. Las acciones de Struts 2 no están acopladas a un contenedor. En la mayoría de los casos, los contextos de los servlets se representan como mapas simples, lo que permite probar las acciones de forma aislada.
El filtro forma parte de la API de Servlet, por lo que Struts 2 Framework utiliza el concepto de interceptores para compartir la solución de algunas inquietudes comunes mediante diferentes acciones.
También puede escribir fácilmente casos de prueba para Interceptor y clase de Acción.
Como una regla de oro
- Los filtros se ejecutan antes de cada
request
. Losstruts
sí es un filtro. -
interceptors
pueden ejecutarse antes, después de las acciones de struts. No se ejecutarán si la solicitud no finaliza con.action
.
Entonces, algunos ejemplos de filtros podrían ser:
- Si desea comprimir sus archivos
js
ycss
, debe elegir filtros y no interceptores. - Si solo desea que cierta dirección IP acceda a su sitio web, debe desarrollarlo como filtro y verificar la dirección IP de la solicitud.
- Si desea proteger su sitio contra un ataque CSRF, debe escribir un filtro para verificar el token CSRF en las solicitudes.
- Si desea registrar la respuesta de su sitio por tiempo de solicitud, puede usar un filtro para calcular el tiempo antes y después de
chain.doFilter(request, response)
En teoría, puede desarrollar una aplicación web de puntales sin desarrollar sus propios interceptors
y usar solo filters
. Pero enfrentará muchos problemas y codificará los filtros de la caldera.
Muchas de las características de struts 2 están compiladas con interceptores, puedes encontrarla en struts-default.xml ( https://struts.apache.org/docs/struts-defaultxml.html ). La lista te ayudará a encontrar cuándo se pueden usar los interceptores. . (Por ejemplo, ParametersInterceptor
ejecuta antes de las acciones para aplicar los valores de formulario enviados a las acciones)
Al trabajar con interceptores, puede acceder fácilmente a las características de struts, por ejemplo getText
partir de recursos de mensaje, obtener el nombre de la acción actual y el espacio de nombre, cambiar el flujo de acción.
Considerando lo anterior aquí hay algunos casos que pueden ser desarrollados por interceptores:
- Si desea que solo los usuarios que hayan iniciado sesión puedan acceder a ciertas acciones, debe desarrollarlo con interceptores.
- Si desea realizar un seguimiento de qué acciones es usuario de navegación. Puede usar un interceptor para realizar un seguimiento de las acciones visitadas.
- Si desea manejar sus errores de acción en un solo punto, puede usar un interceptor que capture todas las
invocation.invoke()
Los interceptores están proporcionando el patrón de diseño de filtro y Cadena de responsabilidad para las acciones de los puntales, mientras que los filtros proporcionan este patrón a toda su aplicación web.