CURSO STRUTS 2 INTERCEPTORS

Slides:



Advertisements
Presentaciones similares
Internet y tecnologías web
Advertisements

Curso de java básico (scjp)
El mecanismo básico de interacción entre el usuario y un sitio web esta dado por el uso de formularios html. El server envía un formulario que el browser.
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Patrón MVC con STRUTS.
CGI I La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con él. Dicho.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Aprendizaje de Microsoft® Access® 2010
Arquitectura CLARO-TECNOTREE
"java del lado del servidor" Servlet y JSP Java Server Pages.
4ta. Reunión SpringHispano & JavaMexico Struts 2.
Servlets Servlets.
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
Curso de Java y Aplicaciones Web
Symfony La Vista y el Controlador (MVC)
Java 2 Platform Enterprise Edition
RMI (Remote Method Invocation)
Aplicación del paradigma orientado a objetos
Sesión en Servlets 31 de Marzo de Índice ¿Por qué seguir la trayectoria de usuarios? Formas de seguir la trayectoria de usuarios –Cookies –Reescritura.
CURSO STRUTS 2 CONVERSIÓN DE TIPOS
RESUMENCURSO STRUTS 2 Resumen de lo visto en este tercer módulo: VISTA del framework Struts 2 Debes tener los conceptos muy claros sobre: Results UI Tags.
JSP COOKIES. cookies  Las cookies son datos guardados por los navegadores a instancias del servidor.  Los sitios Web las utilizan con propósitos diversos:
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Igor Santos Grueiro. Ahora tenemos datos y datos …
Ingeniero Anyelo Quintero
Semana 5 Subprogramas..
Servlets, JSP, JavaBEANS,JDBC
Curso de Creación aplicaciones dinámicas web con PHP y MySQL Continuamos.
SPRING MVC.
CURSO STRUTS 2 RESUMEN Resumen de lo visto en este quinto módulo: CONCEPTOS AVANZADOS del framework Struts 2: Debes tener los conceptos muy claros sobre:
Patrones de Diseño: Command
Servlets 18 de Marzo de Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Estructura básica de un HttpServlet Servlet simple que genera.
3. Espacios de trabajo. Manual de formación 2 3. Espacios de trabajo 3.1 Introducción … ……pág.45.
CURSO STRUTS 2 RESUMEN Resumen de lo visto en este primer módulo de INTRODUCCIÓN al framework Struts 2 Debes tener los conceptos muy claros sobre: Framework.
“SERVLETS”. Paola Rojas Contreras Juan Villarroel Leiva José Miguel Perez V. Departamento de Electrónica.
Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.
Aplicaciones Web M.C. Jorge Eduardo Ibarra Esquer
MÓDULO 1: Introducción al framework Struts 2
Modelo-Vista-Controlador Este patrón fue descrito por primera vez por Trygve Reenskaug en 1979, y la implementación original fue realizada en Smalltalk.
CURSO STRUTS 2 RESUMEN Resumen de lo visto en este segundo módulo: CONCEPTOS PRINCIPALES del framework Struts 2 Debes tener los conceptos muy claros sobre:
FRAMEWORK VS Código fuente
Desarrollo con Servlets. Servlets: Introducción  Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java.
Aplicaciones Web de Servidor
Servlets 10 de Mayo de 2006.
Muchas personas usan una lista de tareas pendientes, ya sea en papel, en una hoja de cálculo o en una combinación de papel y medios electrónicos. En Outlook.
I NGENIERÍA DE S OFTWARE L ABORATORIO IX Struts Eduardo Saavedra A. 27/10/2009.
Manual Desarrollo Flex – J2EE. Contenidos Análisis y Diseño 1 Implementación 2 J2EE 3 Pruebas 4.
Jakarta Struts version Juan Manuel Zorrilla Gamarra Mario Titto Acostupa.
Confidential // Neoris 1 Confidential // Do Not Reproduce without prior written permission from Neoris Servlets.
SOFTTEK INTERNAL © Copyright All Rights Reserved. Valores Corporativos Softtek S.A. de C.V. Struts Academia Java.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Luis Ponce Cabello.  Primera Parte : JSF  Segunda Parte : Facelets  Tercera Parte : Icefaces.
Guadalupe Andrade Mociño.  Significa Modelo Vista Controlador  Es un patrón de diseño  Esta compuesto por tres grandes capas: modelo, vista y controlador.
FUNDAMENTOS DE PROGRAMACION
Your Logo ING. FREDY ALEXANDER MARTINEZ. Here comes your footer  Page 2 Este patrón fue descrito por primera vez por Trygve Reenskaug en 1979, y la implementación.
Aclaraciones al modelo MVC del Framework de Justicia
Centro Universitario UAEM Zumpango Ingeniería en Computación Agosto 2015.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Notario electrónico Consejería de Justicia y Administración Pública Dirección General de Organización, Inspección y Calidad de los Servicios Antonio Pedro.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Softlogia S.R.L. Formación de Recursos Humanos Java Server Faces Instructor: Martin R. Baspineiro.
Introducción a programación web Martin Esses. Formularios HTML se utilizan para pasar datos a un servidor. Un formulario HTML puede contener elementos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Patricia López & Julio Medina Computadores y Tiempo Real Santander, 2013 G80 - Advanced Computation 1 Generación de Código con BOUML.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Definición: Es un estilo de programación, su objetivo primordial es la separación de la capa de presentación, capa de negocio y la capa de datos. ARQUITECTURA.
Introducción a programación web Martin Esses. En las presentaciones anteriores, vimos como enviar datos a un controlador usando POST y como generar formularios.
Transcripción de la presentación:

CURSO STRUTS 2 INTERCEPTORS En el siguiente apartado del curso se estudiará el componente Interceptor del framework Struts 2, realizando una descripción de su objetivo, tareas y características. La información que se estudiará en este apartado es: ¿Qué son los Interceptors? Funcionamiento de los Interceptors Configuración de los Interceptors Interceptors por defecto de Struts 2 Construcción de Interceptors personalizados

¿QUÉ SON LOS INTERCEPTORS? CURSO STRUTS 2 INTERCEPTORS ¿QUÉ SON LOS INTERCEPTORS? Un Interceptor es un componente de Struts 2 que se encarga de capturar las peticiones Web que se reciben antes de llegar al Modelo (Action) para realizar gestiones sobre esta. Cada Interceptor tiene como meta realizar una labor en concreto sobre la petición, de esta forma se mantiene la independencia entre cada Interceptor: interceptor para la gestión de excepciones, interceptor para la validación, interceptor para la conversión de tipos, … Mediante los Interceptors el framework Struts 2 consigue una alto nivel de separación entre las capas de la arquitectura Modelo-Vista-Controlador, dado que trabajan de forma aislada cada petición y no se acoplan con el resto de capas de la arquitectura. Action Result exception modelDrive params workflow

FUNCIONAMIENTO DE LOS INTERCEPTORS CURSO STRUTS 2 INTERCEPTORS FUNCIONAMIENTO DE LOS INTERCEPTORS El componente ActionInvocation del framework, es la clase responsable de la ejecución completa de una petición, gestionando el orden de ejecución de los Interceptors, el Action y el Result correspondiente. Cada vez que la clase ActionInvocation llama a un Interceptor ejecuta el método intercept(), donde el Interceptor realiza sus labores, una de las propias tareas del interceptor es volver a llamar al ActionInvocation mediante la sentencia: invocation.invoke() devolviendo el control a la clase ActionInvocation para que valide el estado y, si este es correcto, pase a ejecutar el siguiente Interceptor, y así sucesivamente. Cada Interceptor pasa por tres fases en su ejecución: Fase de pre-procesamiento Devolución control ActionInvocation Fase post-procesamiento Fase de pre-procesamiento, el Interceptor puede realizar tareas de preparación, filtrado, alteración datos o cualquier tarea que manipule los datos antes de que alcancen el Action. Devolución control ActionInvocation, llamando para ello al método invoke(), o devolviendo directamente un resultado String. La clase ActionInvocation será la que decida pasar el control al siguiente Interceptor, o al Action, o al Result, si el estado no es correcto. Fase post-procesamiento, el Interceptor realiza tareas de alteración de los datos, gestión de errores, estado de atributos. Pero durante esta fase no se podrá modificar el estado (Result) dado que está ya se ha procesado.

FUNCIONAMIENTO DE LOS INTERCEPTORS CURSO STRUTS 2 INTERCEPTORS FUNCIONAMIENTO DE LOS INTERCEPTORS Orden de invocación de los Interceptors El Interceptor Stack que se deben ejecutar en una petición, se ejecutan en el mismo orden en los que están declarados en la configuración XML. Ejemplo basicStack <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> </interceptor-stack> El orden de ejecución de los Interceptors del basicStack sería: primero exception, segundo servletConfig, tercero prepare, cuarto checkbox, quinto params y, sexto conversionError. La clase ActionInvocation sigue el mismo orden de ejecución de los Interceptors que según están declarados en la configuración.

CONFIGURACIÓN DE LOS INTERCEPTORS CURSO STRUTS 2 INTERCEPTORS CONFIGURACIÓN DE LOS INTERCEPTORS Los Interceptor se deben declarar en los archivos de configuración XML de la aplicación, y básicamente existe dos lugares para configurar el Interceptor Stack a ejecutar en una petición: Package configurando de esta forma el Interceptor Stack estos se ejecutan para todos las URL del package. Se puede configurar mediante la extensión de un paquete que ya tiene definida una configuración de Interceptors, por ejemplo struts-default, o bien realizar la propia configuración de los Interceptor. <package name=”...” namespace=”...” extens=”struts-default”>   <interceptor-ref name="roles"/> <interceptor-ref name="basicStack"/> <action name="..." class="..."> <result>/jsp/Success.jsp</result> </action> </package> struts.xml Action consiste en configurar el Interceptor Stack a ejecutarse para un solo <action> de la configuración del package, el resto de URL que estén en el package no ejecutarán los Interceptors. <package name=”...” namespace=”...” extens=”struts-default”> <action name="..." class="..."> <interceptor-ref name="roles"/> <interceptor-ref name="basicStack"/> <result>/jsp/Success.jsp</result> </action> </package> <package> <package> configuración interceptor <action> configuración interceptor

CONTENIDO PACKAGE STRUTS-DEFAULT CURSO STRUTS 2 INTERCEPTORS CONFIGURACIÓN DE LOS INTERCEPTORS defaultStack Struts 2 dispone de un package con la configuración por defecto para la mayoría de los Actions, el cual se puede extender para reutilizar su configuración. CONTENIDO PACKAGE STRUTS-DEFAULT Al extender de la package struts-default automáticamente el package que lo utilice tendrá configurado el Interceptor Stack, defaultStack, pero esta configuración se puede variar, sobrescribir o incluso definir una totalmente nueva. Contenido del package struts-default <package name="struts-default" abstract="true"> <interceptors> ... <interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> <interceptor-ref name="profiling"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> <interceptor-ref name="workflow"> </interceptor-stack> </interceptors>   <default-interceptor-ref name="defaultStack"/> </package>

CONFIGURACIÓN DE LOS INTERCEPTORS Definir el Stack completo de Interceptors <package name=”...” namespace=”...” extends=”struts-default”>   <action name="..." class="..."> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="params"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="i18n"/> <interceptor-ref name="chain"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">myValidationExcudeMethod</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">myWorkflowExcludeMethod</param> </action> </package> CURSO STRUTS 2 INTERCEPTORS CONFIGURACIÓN DE LOS INTERCEPTORS Sobrescribir configuración Interceptors Se puede sobrescribir la configuración de los Interceptor de dos métodos: STACK COMPLETO REFERENCIAR A UN INTERCEPTOR STACK Referenciar al Interceptor Stack ya configurada y modificar al configuración. <package name=”...” namespace=”...” extends=”struts-default”>   <action name="..." class="..."> <interceptor-ref name="defaultStack"> <param name="validation.excludeMethods">myValidationExcludeMethod</param> <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref> </action> </package>

INTERCEPTORS POR DEFECTO CURSO STRUTS 2 INTERCEPTORS INTERCEPTORS POR DEFECTO Struts 2 viene con toda una serie de Interceptors ya configurados, que realizan la mayoría de las tareas posibles que se presenta en una aplicación Web. De todas formas el framework permite desarrollar tus propios Interceptors y configurar su ejecución para las peticiones. Para utilizar los Interceptors que proporciona el framework lo más sencillo es que la configuración, el package de un extienda de la configuración struts-default donde se encuentran configurados el Interceptors Stack, interceptor-stack, o bien configurar el Interceptor Stack por petición (<action>). Interceptors Utilidad Interceptors Transferencia Datos Interceptors Workflow Interceptors Seguridad Interceptors Varios

INTERCEPTORS POR DEFECTO CURSO STRUTS 2 INTERCEPTORS INTERCEPTORS POR DEFECTO Interceptors Utilidad El cometido de los siguientes Interceptors dados por el framework, es realizar labores que faciliten el desarrollo, rendimiento y encuentren problemas. TIMER DEBUG LOGGER PROFILING TIMER Este Interceptor simplemente captura la duración de la ejecución de una petición, enviando esta información mediante la librería commons-loggin. INFO: Executed action [/capitulo2/login] took 50 ms. Puede ser útil para conocer el rendimiento y tiempo de ejecución de los distintos Action. PROFILING Permite realizar tareas de profiling para cada petición, pudiendo activarse mediante un parámetro recibido en la petición HTTP, por defecto profiling=true. El nombre del parámetro para activar este Intercepor se puede configurar mediante el parámetro profilingKey (String). DEBUG El Interceptor permite obtener la información que gestiona la página actual de la aplicación para conocer los datos. Para activar el Interceptor es necesario que el parámetro devMode del framework esté true, permitiendo obtener los valores actuales de la página de cuatro formas distintas: xml console command browser LOGGER Este Interceptor dispone de un mecanismo simple de loggin que registra la fase de pre-procesamiento y la fase de post-procesamiento de una petición. INFO: Starting execution stack for action /capitulo2/login INFO: Finishing execution stack for action /capitulo2/login Puede ser útil para depuración (debug) de las peticiones.

INTERCEPTORS POR DEFECTO STATIC-PARAMS Este Interceptor también transfiere una serie de parámetros al Value Stack, pero en este caso el origen de los valores de estos están definidos en el archivo de configuración XML. <action name="..." class=". . ."> <param name=”atributo1”>valor atributo 1</param> <param name=”atributo2”>valor atributo 2</param> </action> AUTOWIRING Este Interceptor permite un punto de integración para usar Spring para gestionar los recursos. SERVLET-CONFIG El Interceptor servlet-config permite inyectar varios objetos del API Java Servlet en el Action, a través de métodos “setter” que son definidos en los interfaces que debe implementar el Action. La lista de interfaces, que debe implementar el Action, y objeto que asigna mediante su método “set” es la siguiente: ServletContextAware – para el ServletContext. ServletRequestAware – para el HttpServletRequest. ServletResponseAware – para el HttpServletResponse. ParameterAware – asigna un Map con los parámetros de la petición (request). RequestAware – asigna un Map con los atributos de la petición (request). SessionAware – asigna un Map con los atributos de la sesión. ApplicationAware – asigna un Map con los atributos del ServletContext. PrincipalAware – asigna el objeto de seguridad Principal. CURSO STRUTS 2 INTERCEPTORS INTERCEPTORS POR DEFECTO Interceptors Transferencia Datos Los Interceptors que se basan en transferencia de datos gestionan y manipulan los datos de diferentes formas: parámetros dinámicos, parámetros estáticos, conversión tipos, checkbox… PARAMS STATIC-PARAMS AUTOWIRING SERVLET-CONFIG FILEUPLOAD ALIAS CHECKBOX PARAMS El objeto de este Interceptor es transferir los parámetros recibidos de una petición al Value Stack. CHECKBOX Interceptor responsable de gestionar los valores de los checkbox en los formulario, tanto para aquellos que estén seleccionados (checked), como los que no, en cuyo caso marca el valor “false” o “null” según sea el atributo. El problema de los checkbox procede del propio tipo de elemento Web que se trata, el cual no envía ninguna información en la petición en el momento que no está seleccionado (checked). ALIAS Interceptor que modifica el nombre de distintos parámetros que puedan ser coincidir en una petición, o bien, obligar mediante la configuración “aliasses”, a que el nombre de ciertos parámetros pase a llamarse de otro forma. FILEUPLOAD Interceptor que gestión el envío de archivos a la aplicación, controlando el tipo mime, tamaño máximo y las extensiones de archivo soportadas.

INTERCEPTORS POR DEFECTO CURSO STRUTS 2 INTERCEPTORS INTERCEPTORS POR DEFECTO Interceptors Workflow La labor del siguiente grupo de Interceptor, es gestionar el flujo de trabajo de las peticiones y el estado de las mismas, pudiendo llegar incluso a cambiar el Result a mostrar. WORKFLOW VALIDATION PREPARE MODELDRIVEN WORKFLOW Este interceptor se encarga de invocar al método “validate()” del Action, siempre y cuando este implemente el interface Validateable. En el momento que se produce un error en la ejecución de los métodos de validación que definen estos interfaces en el Actio, automáticamente el Interceptor envía el String “INPUT” al framework. public String intercept(ActionInvocation invocation) throws Exception { Action action = invocation.getAction(); if (action instanceof Validateable) { Validateable validateable = (Validateable) action; validateable.validate(); }   if (action instanceof ValidationAware) { ValidationAware validationAwareAction = ValidationAware) action; if (validationAwareAction.hasErrors()) { return Action.INPUT; return invocation.invoke(); Este interceptor puede configurarse con varios parámetros: alwaysInvokeValidate (Boolean), indica si se debe invocar siempre el método “valídate()”,por defecto “true”. inputResultName (String), respuesta a enviar al framework, si se produce un error en la validación, por defecto es “INPUT”. excludeMethods (String), métodos para los que no se debe ejecutar la validación, por ejemplo para el caso de tratarse de un error “error” o “input”, no se debería volver a validar. <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse, errorValidacion</param> <param name="inputResultName">errorValidacion</param> </interceptor-ref> MODELDRIVEN El interceptor modelDriven, utiliza el patrón ModelDriven para instanciar todos los parámetros de la petición en un atributo del Action, ocultando a la Vista que tipo de objeto se trata. Para que entre en acción esta tarea, la clase Action de implementar el interface ModelDriven y método “getModel()” donde se retorna el objeto del Action que hay que completar con los parámetros. VALIDATION El Interceptor validation, es el responsable de las validaciones que debe realiza el framework de validaciones que usa el framework Struts 2. No realiza las mismas validaciones que el Interceptor workflow. PREPARE El Interceptor prepare dispone de un punto de entrada en el Action para invocar al método “prepare()” el cual realiza tareas de pre-procesamiento antes de que se ejecute la lógica del Action “execute()”. Para que entre en ejecución este Interceptor el Action de implementar el interface Preparable, el cual define el método “prepare()”. El interceptor dispone de un parámetro para su configuración, allwaysInvokePrepare (Boolean) para indicar si se debe o no llamar al método “prepare()”, por defecto es true. Este Interceptor resulta útil para aquellos Actions en las que es necesario un fase preprocesamiento antes de realizar la lógica, como puede ser invocar a la fuente de datos para obtener un listado de objetos o un objeto que es necesario en el método “execute()”.

INTERCEPTORS POR DEFECTO CURSO STRUTS 2 INTERCEPTORS INTERCEPTORS POR DEFECTO Interceptors Seguridad Struts 2 también proporciona algunos Interceptors relacionados con la seguridad de las aplicaciones en su entorno, el Contenedor de Servlets. ROLES ROLES Este Interceptor solo permite la ejecución del Action si el usuario supera la seguridad JAAS Role. El parámetro de configuración de este Interceptor para indicar que roles son válidos es: allowedRoles (String), lista de roles permitidos separados por comas. <interceptor-ref name="roles"> <param name="allowedRoles">admin, manager</param> </interceptor-ref>

INTERCEPTORS POR DEFECTO CURSO STRUTS 2 INTERCEPTORS INTERCEPTORS POR DEFECTO Interceptors Varios El framework cuenta con una serie de variados Interceptors para distintas tareas, como pueda ser gestión errores, token, i18n,… EXCEPTION TOKEN Y TOKEN-SESSION I18N EXECANDWAIT EXCEPTION Este importante Interceptor es el responsable de la gestión de las excepciones en la aplicación, por este motivo siempre suele ejecutarse el primero y último, para capturar cualquier excepción independientemente del punto que se produzca. El Interceptor devuelve la Vista que este configurado con respecto a la exception producida, además añade dos atributos al Value Stack: exception y exceptionStack. <global-results> <result name="error">/jsp/Error.jsp</result> </global-results>   <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings> Los parámetros de configuración que se le pueden aplicar este Interceptor son: logEnabled (Boolean), índica si las excepciones deben ser registradas (log), por defecto “true”. logLevel (String), representa el nivel del log que se utilizará (trace, debug, info, warn, error o fatal), por defecto es debug. logCategory (String), define la categoría en la que se ejecuta el log. EXECANDWAIT Este Interceptor se utiliza para aquellos Actions cuya ejecución de su lógica tarde mucho tiempo en completarse. El objetivo del Interceptor es mostrar una pantalla intermedia al usuario donde se muestre el progreso de la evolución de la petición original, informando al usuario en todo momento del estado de su petición. I18N Interceptor que se encarga de guardar el idioma del usuario en su sesión HTTP. Los parámetros de configuración del filtro son: parameterName (String), es el nombre del parámetro que se utiliza para cambiar el idioma de la sesión del usuario, por defecto es “request_locale”. requestOnlyParamterName (String), nombre del parámetro que se utiliza para cambiar el idioma, pero solo para la petición actual, por defecto es “request_only_locale”. attributeName, indica el nombre del atributo con el que se guardará en la sesión HTTP del usuario su correspondiente idioma, por defecto es WW_TRANS_I18N_LOCALE. TOKEN Y TOKEN-SESSION Interceptors destinados a evitar el envío de formularios duplicados (doble submit). Para poder realizarlo el framework utiliza un token único en cada formulario de esta forma no permite que se envíen dos formularios con el mismo token. Para poder configurar este Interceptor es necesario añadir el tag: <s:token/> dentro del formulario del JSP.

CONSTRUCCIÓN DE INTERCEPTORS PERSONALIZADOS CURSO STRUTS 2 INTERCEPTORS CONSTRUCCIÓN DE INTERCEPTORS PERSONALIZADOS Para desarrollar un Interceptor propio basta con crear una clase Java que implemente el interface com.opensymphony.xworkd2.interceptor.Interceptor. El interface Interceptor public interface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; } El interface Interceptor contiene tres métodos sencillos, los dos primeros init() y destroy() se utilizan para el ciclo de vida del Interceptor, mientras que el método intercept(), representa la lógica del Interceptor; en este método debe devolver en algún momento el control al ActionInvocation mediante la llamada a su método “invoke()”, sino se dejaría de ejecutar la petición. NOTA: Los Interceptor no son thread-safe, sólo se crea una instancia de la clase del Interceptor para toda la aplicación, todas las peticiones comparten el mismo Interceptor. Por esto motivo hay que tener cuidado en su desarrollo. La clase AbstractInterceptor Struts 2 también dispone de una clase abstracta que implemente el interface Interceptor, la clase AbstractInterceptor la cual no realiza ninguna tarea en los métodos init() y destroy(), dejando el método intercept() abstracto para que lo completen las clases que extiendan de ella.

CONSTRUCCIÓN DE INTERCEPTORS PERSONALIZADOS AutentificacionInterceptor public class AutentificacionInterceptor implements Interceptor {   private String paramUsuario = “usuario”; //métodos get y set de paramUsuario public void init() { } public void destroy() { public String intercept( ActionInvocation actionInvocation ) throws Exception { Map session = actionInvocation.getInvocationContext().getSession(); Usuario usuario = (Usuario) session.get(this.paramUsuario); if (usuario == null) { return Action.LOGIN; return actionInvocation.invoke(); CURSO STRUTS 2 INTERCEPTORS CONSTRUCCIÓN DE INTERCEPTORS PERSONALIZADOS Ejemplo Interceptor Personalizado: AutentificacionInterceptor A continuación se mostrará la construcción de un Interceptor que se utilizará para gestionar la autentificación de los usuarios en una aplicación. Clase AutentificacionInterceptor Configuración Interceptor Configuración Interceptor Configuramos el autentificación interceptor para todos los packages excepto el de /login para que invoque en primer lugar el Interceptor de autentificación. <package name="capitulo2" namespace="/capitulo2/secure" extends="struts-default">   <interceptors> <interceptor name="autentificacionInterceptor" class="ejemplo.interceptors.AutentificacionInterceptor”> <param name=“paramUsuario”>login_usuario</parameter> </interceptor> <interceptor-stack name="secureStack"> <interceptor-ref name="autentificacionInterceptor"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="secureStack"/> . . . </package>

CURSO STRUTS 2 INTERCEPTORS RECUERDA QUE… Configuración de los Intercpetors Los Interceptor se deben declarar en los archivos de configuración XML de la aplicación, y básicamente existe dos lugares para configurar el Interceptor Stack a ejecutar en una petición: Action, configurar el Interceptor Stack a ejecutarse para un solo Action. <package name=”...” namespace=”...” extens=”struts-default”> <action name="..." class="..."> <interceptor-ref name="roles"/> <interceptor-ref name="basicStack"/> <result>/jsp/Success.jsp</result> </action> </package> Package, configurando de esta forma el Interceptor Stack estos se ejecutan para todos las URL del package.   CURSO STRUTS 2 INTERCEPTORS RECUERDA QUE… Durante el siguiente apartado hemos aprendido qué es y como funciona los componentes Interceptors dentro de la arquitectura del framework Struts 2, resaltando los siguientes conceptos vistos: ¿Qué es un Interceptor? Un Interceptor es un componente de Struts 2 que se encarga de capturar las peticiones Web que se reciben antes de llegar al Modelo (Action) para realizar gestiones sobre esta. Cada Interceptor tiene como meta realizar una labor en concreto sobre la petición, de esta forma se mantiene la independencia entre cada Interceptor. Definición Funcionamiento Orden Configuración Funcionamiento de los Interceptors Cada Interceptor pasa por tres fases en su ejecución: Fase de pre-procesamiento, el Interceptor puede realizar tareas de preparación, filtrado, alteración datos o cualquier tarea que manipule los datos antes de que alcancen el Action. Devolución control ActionInvocation, llamando para ello al método invoke(), o devolviendo directamente un resultado String. La clase ActionInvocation será la que decida pasar el control al siguiente Interceptor, o al Action, o al Result, si el estado no es correcto. Fase post-procesamiento, el Interceptor realiza tareas de alteración de los datos, gestión de errores, estado de atributos. Pero durante esta fase no se podrá modificar el estado (Result) dado que está ya se ha procesado. Orden de invocación de los Interceptors El Interceptor Stack que se deben ejecutar en una petición, se ejecutan en el mismo orden en los que están declarados en la configuración XML. <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> </interceptor-stack> Action Result exception modelDrive params workflow

CURSO STRUTS 2 INTERCEPTORS RECUERDA QUE… Interceptors de Utilidad Interceptors que realizan labores para facilitar el desarrollo, rendimiento y encuentren problemas. DEBUG, Interceptor que permite obtener toda la información del ValueStack de la página actual para conocer los datos. LOGGER , Interceptor dispone de un mecanismo simple de loggin que registra la fase de pre-procesamiento y la fase de post-procesamiento de una petición. PROFILING, Interceptor que permite realizar tareas de profiling para cada petición. TIMER, Interceptor que simplemente captura la duración de la ejecución de una petición CURSO STRUTS 2 INTERCEPTORS Interceptors Workflow Grupo de Interceptor que gestionan el flujo de trabajo de las peticiones y el estado de las mismas, pudiendo llegar incluso a cambiar el Result a mostrar. MODELDRIVEN, Interceptor que utiliza el patrón ModelDriven para instanciar todos los parámetros de la petición en un atributo del Action, ocultando a la Vista que tipo de objeto se trata. PREPARE, Interceptor dispone de un punto de entrada en el Action para invocar al método “prepare()” el cual realiza tareas de pre-procesamiento. VALIDATION, Interceptor responsable de las validaciones que debe realiza el framework de validaciones que utiliza el framework Struts 2. WORKFLOW, Interceptor encargado de invocar al método “validate()” del Action si este implementa el interface Validateable. RECUERDA QUE… Es muy importante conocer con que tipos de Interceptors cuenta Struts 2, así como el objetivo de cada uno: Utilidad Interceptors de Transferencia de Datos Interceptors que facilitan la transferencia de datos gestionan, así como su manipulación. ALIAS, Interceptor que modifica el nombre de distintos parámetros que puedan ser coincidir en una petición. AUTOWIRING, Interceptor permite un punto de integración para usar Spring para gestionar los recursos. CHECKBOX, Interceptor responsable de gestionar los valores de los checkbox en los formulario. FILEUPLOAD, Interceptor que gestiona el upload de archivos. PARAMS, Interceptor que transfiere los parámetros recibidos de una petición al Value Stack. SERVLET-CONFIG, Interceptor permite inyectar objetos del API Java Servlet en el Action. STATIC-PARAMS, Interceptor transfiere los valores estáticos definidos en los archivox XML al Value Stack. Transferencia Datos Workflow Intercpetors de Seguridad Interceptor relacionados con la seguridad de la aplicación en su entorno, el Contenedor de Servlets. ROLES, Interceptor solo permite la ejecución del Action si el usuario supera la seguridad JAAS Role.0 Seguridad Varios Intercpetors Varios Interceptors para distintas tareas, como pueda ser gestión errores, token, i18n,… EXECANDWAIT, Interceptor utilizado para aquellos Actions cuya ejecución de su lógica tarde mucho tiempo en completarse. EXCEPTION, Interceptor responsable de la gestión de las excepciones en la aplicación.   I18N, Interceptor que se encarga de guardar el idioma del usuario en su sesión HTTP. TOKEN Y TOKEN-SESSION, Interceptors destinados a evitar el envío de formularios duplicados (doble submit).