FW2/FW Justicia MANUAL DE INTEGRACIÓN Servicios de Firma AFC Versión 1.5 Unidad de Arquitectura Software y Soporte de Aplicaciones Framework 2/ Framework Justicia Servicios de Firma AFC Cliente Hoja de Control Título Servicios de Firma AFC Cliente Documento de Referencia NORMATIVA ATLAS Responsable Unidad de Arquitectura de Software y Soporte de Aplicaciones Versión 1.5 Fecha Versión 24/05/2016 Registro de Cambios Versión Causa del Cambio 1.0 Versión inicial del documento Responsable del Cambio Fecha del Cambio Unidad de Arquitectura de Software y Soporte de 06/02/2014 Aplicaciones 1.1 Unidad de Arquitectura de Añadida información sobre Implementación de Servicio de AFC de operaciones de servidor Software y Soporte de 05/11/2014 Aplicaciones 1.2 Unidad de Arquitectura de Añadida información sobre Implementación de applet de firma (para firmas con Hash) Software y Soporte de 24/02/2015 Aplicaciones 1.3 1.4 1.5 Se incluye la integración con el servicio AFC Unidad de Arquitectura Software Certificado de Aplicaciones Se incluyen las instrucciones para las solicitudes de instalación en pre-producción y Unidad de Arquitectura Software producción de las aplicaciones que se integran de Aplicaciones con AFC. Se incluye las instrucciones para actualizar las Unidad de Arquitectura Software aplicaciones de justicia para dejar de utilizar de Aplicaciones ASF y empezar a utilizar AFC. 2 de 18 21/09/2015 23/05/2016 24/05/2016 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente Índice 1. INTRODUCCIÓN ................................................................................................................................................................ 4 2. EJEMPLO ............................................................................................................................................................................. 5 3. INSTALACION Y CONFIGURACION............................................................................................................................. 5 3.1. CONFIGURACION ....................................................................................................................................................... 5 3.1.1. FW2......................................................................................................................................................................... 5 3.1.2. Framework Justicia ................................................................................................................................................ 6 3.2. INSTALACION.............................................................................................................................................................. 7 3.2.1. FW2......................................................................................................................................................................... 7 3.2.2. Framework Justicia ................................................................................................................................................ 7 3.2.3. Común ..................................................................................................................................................................... 8 4. USO ........................................................................................................................................................................................ 8 4.1. 4.2. 4.3. 4.1. 4.2. 4.3. 5. EXTENSIÓN DE CLASE SERVICEUTIL SI ES NECESARIO ................................................................................... 8 INSTANCIACION DEL SERVICIO DE AFC CLIENTE ............................................................................................ 11 FIRMA INDIVIDUAL DE DOCUMENTOS PDF ....................................................................................................... 11 FIRMA MASIVA DOCUMENTOS PDF ..................................................................................................................... 11 INSTANCIACION DEL SERVICIO DE AFC SERVIDOR ........................................................................................ 17 INSTANCIACION DEL SERVICIO DE AFC CERTIFICADO .................................................................................. 17 ENLACES RELACIONADOS .......................................................................................................................................... 18 3 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente 1. INTRODUCCIÓN AFC es la solución de firma centralizada para las aplicaciones de la Comunidad de Madrid. Objetivos buscados: Operativa de firma similar y centralizada. Formatos comunes de firma compatibles con ENI (Esquema Nacional de Interoperabilidad) Simplificar la integración de requisitos de firma en los desarrollos. Transparencia en las actualizaciones de la plataforma de firma Inventario de aplicaciones y tipos de firmas Histórico y estadísticas de operaciones realizadas Operaciones que permite: Firma digital en cliente Firma digital en servidor Validación de firmas Tipos de firma (Admitidos por el ENI) PADES XADES CADES Integración: La integración con la solucion de AFC se realiza a través de la librería del Framework Atlas atlasfrm-eadm-lib (librería que conecta con los servicios de administración electrónica). Esta librería puede ser utilizada tanto por aplicaciones desarrolladas con el framework Atlas así como las desarrolladas con otros frameworks Java (framework 2 o framework Justicia). Dentro de esta librería podemos encontrar dos servicios: AfcOpeClienteService: Servicio de Operaciones en cliente AfcOpeServidorService: Servicio de Operacion en servidor AfcOpeCertificadoService: Servicio de operaciones con certificados Este documento describe como integrar la librería de Atlas atlasfrm-cryto-lib en una aplicación desarrollada con otro framework Java que no sea Atlas, por ejemplo Framework 2 o framework de Justicia. 4 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente 2. EJEMPLO Se ha desarrollado un ejemplo de uso del servicio de AFC en la aplicación ejpl_cryto_web disponible en la url: https://desarrollo.madrid.org/ejpl_cryto_web. 3. INSTALACION Y CONFIGURACION 3.1. CONFIGURACION 3.1.1. FW2. La configuración es realizará igual que en el Framework Atlas con la diferencia de que las variables se han de incluir en el fichero correspondiente del framework que se esté utilizando. A continuación se muestra un ejemplo de configuración de AFC para Framework 2. Ejemplo de configuracion # Configuracion de acceso a AFC_Cliente afc.cliente.endpoint=http://deswebservices.madrid.org/afc_ws/services/ServicioAFCCliente # Configuracion de acceso a AFC_Servidor afc.servidor.endpoint=http://deswebservices.madrid.org/afc_ws/services/ServicioAFCServidor # Configuracion de acceso a AFC_Certificado afc.certificado.endpoint=http://deswebservices.madrid.org/afc_ws/services/ServicioAFCCertificado afc.modulo=ejpl_app afc.password=07d818957a3fa16671165a836732cd6bc23c0008f520e3c9642fd06cce762eac # Opcionalmente se puede incluir información del tipo de documento a firmar si la aplicación solamente trabaja con un tipo de documento afc.documentoTipo=SolicitudAyuda afc.numeroFirma=1 La siguiente configuración es necesaria para el funcionamiento del applet de firma, necesario para realizar firmas de Hash de documentos. Ejemplo de configuración Applet # Configuracion applet de firma afc.clientJSUrl=https://desarrollo4.madrid.org/afirma/firma A continuación se muestra un ejemplo de configuración de COVE para framework 2. Ejemplo de configuracion # Configuracion de acceso a COVE cove.endpoint=http://deswebservices.madrid.org/cove_ws/services/CoveWS cove.usuario=UUIA01 cove.tipo=EJARCH cove.aplicacion=EJPL 5 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente Las variables necesarias para configurar el sistema de trazas son las siguientes: Ejemplo de configuracion # Configuracion de trazas de servicios de ATLAS trazas.nivel.atlas=INFO trazas.ficheroLog=/usr/aplic_ICM/logs/ejpl_crypto_web/ejpl_crypto_web Para la configuración del fichero de log se utilizar la propiedad ‘trazas.ficheroLog’ de FW2. Se creará un nuevo fichero y se añadirá el sufijo ‘_atlas.log’ para distingir el log de FW2 del log de los servicios de ATLAS. Con la propiedad ‘trazas.nivel.atlas’ se especificará el nivel de log deseado. Los niveles disponibles son los de Log4j: DEBUG, INFO, WARN y ERROR. 3.1.2. Framework Justicia La configuración es realizará igual que en el Framework Atlas con la diferencia de que las variables se han de incluir en el fichero correspondiente del framework. A continuación se muestra un ejemplo de configuración de AFC para Framework de Justicia. Ejemplo de configuracion <afc> <certificado> <endpoint> http://deswebservices.madrid.org/afc_ws/services/ServicioAFCCertificado </endpoint> </certificado> <cliente> <endpoint> http://deswebservices.madrid.org/afc_ws/services/ServicioAFCCliente </endpoint> </cliente> <servidor> <endpoint> http://deswebservices.madrid.org/afc_ws/services/ServicioAFCServidor </endpoint> </servidor> <modulo>XXXX</modulo> <password>password</password> <tipoDocumento>PROCESAL</tipoDocumento> <numeroFirma>PROCESAL</numeroFirma> </afc> La siguiente configuración es necesaria para el funcionamiento del applet de firma, necesario para realizar firmas de Hash de documentos. 6 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente Ejemplo de configuración Applet # Configuracion applet de firma <applet_certificados> <url>https://desarrollo4.madrid.org/afirma/firma</url> <version>LITE</version> <filtrarCas>true</filtrarCas> </applet_certificados> A continuación se muestra un ejemplo de configuración de COVE para framework 2. Ejemplo de configuracion # Configuracion de acceso a COVE <cove> <endpoint> http://deswebservices.madrid.org/cove_ws/services/CoveWS </endpoint> <aplicacion>XXXX</aplicacion> <tipo>CEPJUS</tipo> <usuario>USUARIO</usuario> </cove> Las variables necesarias para configurar el sistema de trazas son las siguientes: Ejemplo de configuracion # Configuracion de trazas de servicios de ATLAS <trazas> <nivel> <atlas>INFO</atlas> </nivel> <ficheroLog>/usr/aplic_ICM/logs/xxxx/atlas_xxxx</ficheroLog> </trazas> Para la configuración del fichero de log se utilizar la propiedad ‘trazas.ficheroLog’ de FW2. Se creará un nuevo fichero y se añadirá el sufijo ‘_atlas.log’ para distingir el log de FW2 del log de los servicios de ATLAS. Con la propiedad ‘trazas.nivel.atlas’ se especificará el nivel de log deseado. Los niveles disponibles son los de Log4j: DEBUG, INFO, WARN y ERROR. 3.2. INSTALACION 3.2.1. FW2. Las librerías necesarias para poder utilizar el servicio de afc se encuentran publicadas en el portal de arquitecturasw en el apartado de AFC como librería compartida: fw2-dependencias-ATLAS-1.2.9.war. 3.2.2. Framework Justicia Las aplicaciones de justicia deben incluir en su directorio WEB-INF/lib la librería usuj-3.0.0.jar, además deben incluir la dependencia con última versión de la librería compartida fw2-dependencias-ATLAS-1.2.9.war (la versión de esta librería compartida debe evolucionar al mismo tiempo que la versión de ATLAS). 7 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente 3.2.3. Común Para la solicitud de instalación de la aplicación en los distintos entornos, se informará el valor de la propiedad afc.password en claro, para que la unidad de paso a producción cifre la contraseña correspondiente según el entorno. ¡IMPORTANTE para FW2 y FWJusticia! No existe un entorno de PRE-PRODUCCIÓN de AFC, en ese entorno se apuntará al de VALIDACIÓN. El fichero de configuración del entorno de pre-producción debe ser copia del fichero de configuración del entorno de validación. Por tanto, las solicitudes de intalación en PRODUCCIÓN (que llevan implícita la instalación en PREPRODUCCIÓN) deben llevar las configuraciones para PRE- PRODUCCION (con los valores en claro del entorno de VALIDACIÓN) y PRODUCCIÓN (con los valores en claro de PRODUCCIÓN) 4. USO Una vez configurada la aplicación se puede proceder a utilizar todas las funcionalidades que ofrece. La descripción de cómo utilizar los servicios de AFC se puede ver en los manuales correspondientes del framework Atlas: - Operaciones en cliente consultar el manual ATLAS_MUS_Servicio_AFC_Ope_Cliente. - Operaciones en servidor consultar el manual ATLAS_MUS_Servicio_AFC_Ope_Servidor. - Operaciones en servidor consultar el manual ATLAS_MUS_Servicio_AFC_Ope_Certificado. En este manual se describen y documentan aquellas peculiaridades propias de otros frameworks. 4.1. EXTENSIÓN DE CLASE SERVICEUTIL SI ES NECESARIO La librería atlasServices permite crear y usar los servicios actualmente integrados fuera de entornos Atlas. Para cada servicio de Atlas se ha creado una Factoria que lo instancia. Por ejemplo CryptService se instancia a través de la factoria CryptServiceFactory. Cada Factoria de servicios recibe un parámetro Properties con las propiedades necesarias. Para facilitar la tarea de instanciación sin preocuparse de las propiedades necesarias (siempre que estén correctamente configuradas en el fichero conf) se debe utilizar la clase util.services.Fw2ServiceUtil. Para entornos distintos a FrameWork 2.0 es necesario extender la clase abstracta util.services.ServiceUtil: Métodos a implementar en ServiceUtil 8 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente /** * Metodo abstracto a implementar en la extension de la clase * @param key * @return */ public abstract String getProperty(String key); /** * Devuelve la ruta base de la aplicacion para poder concatenar las * acciones resultado * @return una url del tipo 'http://desarrollo3.madrid.org/ejpl_crypto_web' */ public abstract String getBasePath(HttpServletRequest request); /** * Permite configurar el sistema de trazas de los servicios de ATLAS. */ public abstract void configureLog(); Como ejemplo se muestra la implementación para FrameWork 2.0: Métodos implementados en Fw2ServiceUtil /** * Devuelve la ruta base de la aplicacion para poder concatenar las * acciones resultado * @return una url del tipo 'http://desarrollo3.madrid.org/ejpl_crypto_web' */ @Override public String getBasePath(HttpServletRequest request) { return Config.getWebRoot(request) + request.getContextPath(); } /** * Implementación del método getProperty de la clase padre. Este método devuelve * el valor de una propiedad pasada. */ @Override public String getProperty(String key) { return Config.get(key); } El sistema de trazas de los servicios de ATLAS se basa en log4j. Si el sistema ya se ha activado por la aplicación, la implementación del método configureLog debe ser un método vacío. Si el sistema de trazas de la aplicación es diferente, como en el caso de FW2, se debe iniciar el sistema de log4j para los servicios de Atlas. A continuación se muestra la implementación para FrameWork 2.0: Configuración de log en Fw2ServiceUtil 9 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente public static final String LOG_LAYOUT = "%d{dd/MM/yyyy HH:mm:ss,SSS} %m%n"; public static final String LOG_MAX_FILE_SIZE = "1024KB"; public static final String LOG_SUFFIX = "_atlas.log"; %-5p [%t] (%F:%L) - public static final String PROPERTY_LOG_FILE = "trazas.ficheroLog"; public static final String PROPERTY_LOG_LEVEL = "trazas.nivel.atlas"; … @Override public void configureLog() { try { configureLog(getProperty(PROPERTY_LOG_FILE) + LOG_SUFFIX, getProperty(PROPERTY_LOG_LEVEL), LOG_LAYOUT, LOG_MAX_FILE_SIZE); Logger.getLogger("atlas.services") .info("Log de servicios de ATLAS configurado."); } catch (IOException e) { throw new ConfigurationException("Error configurando log de servicios de ATLAS", e); } } protected void configureLog(String path, String level, String pattern, String maxFileSize) throws IOException { // Configurar Appender de fichero RollingFileAppender appender = new RollingFileAppender( new PatternLayout(pattern), path, true); appender.setThreshold(Level.toLevel(level)); appender.setMaxFileSize(maxFileSize); appender.setMaxBackupIndex(10); // Calcular nivel de trazas Level logLevel = Level.toLevel(level, Level.ERROR); // Configurar categoria raiz. El nivel de log se configurara en funcion del nivel de atlas // Si nivel Atlas <= INFO, se configura info; en caso contrario se configura ERROR Logger root = Logger.getRootLogger(); root.removeAllAppenders(); root.addAppender(appender); root.setLevel(logLevel.isGreaterOrEqual(Level.INFO) ? Level.ERROR : Level.INFO); // Configurar categoria de atlas Logger atlasLog = Logger.getLogger("atlas"); atlasLog.setLevel(logLevel); } 10 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente 4.2. INSTANCIACION DEL SERVICIO DE AFC CLIENTE A continuación se muestra un ejemplo de instanciación del servicio AfcOpClienteService: Ejemplo de instaciación de AfcOpClienteService import util.services.Fw2ServiceUtil; import atlas.crypt.service.AfcOpClienteService; ... AfcOpClienteService afcService = Fw2ServiceUtil.getInstance().getAfcOpClienteService(this.request); Ha de pasarse una referencia al objeto HttpServletRequest para instanciar el servicio. A partir de ahora una vez que tenemos el objeto de la clase AfcOpClienteService este servicio se utiliza igual en todos los frameworks. Las variables de configuración necesarias para la correcta instanciación del servicio son (con datos de prueba para desarrollo): Variables de configuración para el servicio AfcOpClienteService afc.cliente.endpoint = http://deswebservices.madrid.org/afc_ws/services/ServicioAFCCliente afc.modulo = EJPL afc.password = 07d818957a3fa16671165a836732cd6bc23c0008f520e3c9642fd06cce762eac cove.endpoint = http://deswebservices.madrid.org/cove_ws/services/CoveWS 4.3. FIRMA INDIVIDUAL DE DOCUMENTOS PDF Una vez que ya se ha instanciado el Servicio de AFC Cliente ya lo podemos utilizar para realizar firma en cliente. En la aplicación de ejemplo ejpl_crypto_web los recursos de demostración de firma de PDF en cliente son los siguientesson los siguientes: Acción FirmaPdf.java: esta acción se encargará de solicitar la operación de firma al Servicio de AFC y redirigir al usuario a afc_firmacliente. Acción FirmaPdfResultado.java: esta acción se encargará de gestionar el retorno desde afc_firmacliente y obtener el fichero firmado. Página firmaPdf.jsp: página que se encarga de mostrar el fichero firmado para descarga o los errores de firma si ha habido problemas. 4.1. FIRMA MASIVA DOCUMENTOS PDF La firma masiva de documentos PDF en otros framework se realiza igual que en Framework Atlas salvo la 11 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente selección de certificado que se ha de hacer de la siguiente forma: En la firma masiva la selección del certificado se ha de hacer en la aplicación cliente ya que para poder preparar los pdfs para la firma y hacer los hash es necesario tener previamente el certificado digital con el que se va a firmar. En la aplicación de ejemplo ejpl_crypto_web los recursos de demostración para la selección del certificado son los siguientes: Acción SeleccionCertificado.java: esta acción se encargará de gestionar el certificado seleccionado por el usuario. En el ejemplo, se enviará el certificado seleccionado por el usuario a una página que escribirá algunos de los datos de este. Página seleccionCertificado.jsp: esta página muestra el componente de selección de certificados. Página principal_crypt.jsp y rejilla crypt.jsp: estas páginas se encargan de insertar los recursos javascript y css necesarios. ATENCIÓN Para que el componente de selección de certificados funcione correctamente la aplicación web debe cumplir el estándar servlet 2.4 o superior. En el fichero web.xml: <web-app version="2.4" xmlns="http://java... El componente de selección de certificados trabaja conjuntamente con un componente de consola javascript que permite controlar el proceso de desarrollo y que podrá ser desactivado para los entornos productivos. El proceso para utilizar el componente de selección de certificados es el siguiente: Colocar la librería atlasServices.jar en las librerías de proyecto (WEB-INF/lib). Extraer el directorio META-INF/js de la librería al directorio js en la raíz web de la aplicación (java/fuentes/web en FW2). Extraer el directorio META-INF/style de la librería al directorio style en la raíz web de la aplicación (java/fuentes/web en FW2). Una vez colocados todos los recursos necesarios en la aplicación deberán definirse los siguientes elementos: En la cabecera de las páginas jsp, habrá que definir las taglibs para poder ser usadas: Declaración de las taglibs 12 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente <%@ taglib prefix="jsconsole" uri="jsconsole" %> <%@ taglib prefix="afccrypt" uri="afccrypt" %> Una vez definidas las taglibs de afccrypt y jsconsole, se declararán los comandos de cabecera (dentro del tag html <head>). Declaración de comandos de cabecera en tag html <head> <jsconsole:header enabled="true" /> <config:param name="urlAppletFirma" value="afc.clientJSUrl"/> <afccrypt:header url="${urlAppletFirma}" /> El atributo enabled de <jsconsole:header> controla si se muestra la consola de javascript o no. El tag <config:param> solo puede ser usado en FW2. Su cometido es cargar la variable del fichero de configuración indicada en el atributo value y con ella crea un atributo en el request con el valor de name para que pueda ser usado en la página jsp, en el ejemplo en el atributo url del tag <afccrypt:header> que se encarga de cargar los recursos necesarios para el componente de selección de certificados. En otros frameworks, el valor del atributo url tendra que ser proporcionados con los medios disponibles. El componente de selección de certificados se insertará con el comando certificados: Declaración de comando de certificados <!-- Combo de certificados --> <afccrypt:certificados idCombo="comboCerts" urlFiltro="/FiltroCertificados.icm" filtrarCAs="true" notify="certificadoSeleccionado" /> El atributo idCombo se utilizará para establecer el id del combo de certificados y también como prefijo de los parametros que se enviarán al servidor una vez realizada la selección. Si no se establece este parámetro, el valor por defecto será ‘selectCerts’. El atributo filtrarCAs se ulitiza en unión con el atributo urlFiltro. Si filtrarCAs = true, se enviarán los certificados del usuario a servidor y se filtrarán según la normativa de uso de certificados en las firmas digitales. Solo se mostrarán los certificados que cumplan con los criterios de filtrado. El parámetro urlFiltro se configurará entonces con la Url a la que se enviarán los certificados para ser procesados y filtrados. Si filtrarCAs = false no será necesario indicar el parámetro urlFiltro. El atributo notify hace referencia a una función javascript que será llamada cada vez que el usuario seleccione un certificado en el combo. 13 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente A continuación se muestra un resumen de los parámetros disponibles en el comando de certificados: Atributo Descripcion Obligatorio Valor por Defecto idCombo Id del combo de certificados No selectCerts filtrarCAs Indica si filtrar los certificados del usuario No true urlFiltro Url del filtro de certificados No notify Función javascript para cambios de No selección de certificados version Versión del applet a cargar: No LITE No cajaTexto LITE, MEDIA, COMPLETA styleClass Estilo css a asignar al combo de certificados Los parámetros que se enviarán al servidor en el formulario serán los siguientes, donde {idCombo} será el valor del atributo idCombo del comando de certificados: Parámetro Descripción {idCombo}_index Índice del certificado seleccionado en el combo {idCombo}_cn Common Name del certificado seleccionado {idCombo}_alias Alias del certificado en el applet de firma. {idCombo}_b64cert Certificado seleccionado codificado en Base64 Para que los valores anteriores sean enviados al servidor, el componente <afccrypt:certificados> debe estar dentro de un formulario, y al hacer el submit de este es cuando se enviarán a servidor. El filtro de certificados en servidor es simplemente un recubrimiento de la clase FiltroCertificadosUtil en la librería atlasServices.jar. El filtro se puede implementar como una acción de FW2, como un servlet, o como cualquier otro tipo de acción en otros frameworks web. A continuación se muestran implementaciones de referencia como ClaseAccion de FW2 y como Servlet: Filtro de certificados como ClaseAccion en FW2 14 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente public class FiltroCertificados extends ClaseAccion { @Override public String procesar() throws AccionException { try { // Delegar filtrado a la clase de utilidad FiltroCertificadosUtil.filtrarCertificados(request, response, Fw2ServiceUtil.getInstance().getAfcProperties()); } catch (IOException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } return null; } } Filtro de certificados como Servlet public class FiltroCertificadosServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { FiltroCertificadosUtil.filtrarCertificados(request, response, getAfcProperties()); } catch (IOException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } } private Properties getAfcProperties() { Properties props = new Properties(); props.setProperty(CoveServiceFactory.PROPERTY_COVE_ENDPOINT, "****"); return props; } } Configuración en web.xml para Servlet de filtro de certificados <servlet> <display-name>Filtro de Certificados</display-name> <servlet-name>filtroCertificados</servlet-name> <servlet-class>ejpl_crypto_web.servlet.FiltroCertificadosServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>filtroCertificados</servlet-name> <url-pattern>/filtroCertificados</url-pattern> </servlet-mapping> En la aplicación de ejemplo ejpl_crypto_web los recursos de demostración de firma masiva son los siguientes: 15 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente Acciónes FirmaPdfMasiva.java y FirmaPdfMasiva2.java: estas acciones son dos ejemplos de firma masiva en pdf. En la primera se asume la misma configuración de firma para todos los ficheros y en el segundo hay una configuración de firma diferente para cada fichero. Acciónes FirmaPdfMasivaResultado.java y FirmaPdfMasiva2Resultado: acciones que gestionarán el retorno desde AFC para FirmaPdfMasiva.java y FirmaPdfMasiva2.java respectivamente. Clases DemoFileProvider.java y DemoFileProvider2.java: implementaciones de PdfFileProvider para los dos ejemplos de firma masiva. Páginas firmaPdfMasiva.jsp y firmaPdfMasiva2.jsp: páginas que gestionan la selección del certificado de firma y la presentación de los documentos firmados para los dos ejemplos de firma masiva. El primer paso para realizar una firma masiva es implementar la interfaz PdfFileProvider. Esta implementación se encargará de interactuar con los servicios de firma para proporcionar la información necesaria y recoger los ficheros firmados. En los ejemplos de la aplicación ejpl_crypto_web, el tipo del identificador en que se basa la interfaz es una URL. Este objeto es el más conveniente si los ficheros residen en disco. Para ficheros en base de datos se pueden utilizar objetos Long o String que identifiquen la clave primaria de este. Otra opción es construir un bean de datos con la información necesaria para identificar el fichero en el sistema donde este resida, y establecer su tipo como Id de la interfaz. La única restricción es que este objeto ha de ser Serializable. Una vez establecido el tipo del identificador del fichero, la implementación de PdfFileProvider planteará pocos problemas. Las dos implementaciones existentes (DemoFileProvider y DemoFileProvider2) se distinguen en que la primera asume la misma configuración de firma para todos los ficheros (los mismos metadatos de firma, que solo se piden una vez) y la segunda asume una configuración de firma diferente para cada fichero (los metadatos se pedirán por cada configuración de tipoFirma/numeroFirma diferente). El segundo paso consistirá en crear una ClaseAccion/Servlet/Accion (uno de ellos dependiendo del framework web en uso) que ejecute las siguientes operaciones: 1. Seleccionar el certificado de firma con el taglib afccrypt. 2. Instanciar la implementación de PdfFileProvider (debe ser almacenada en sesión para el resultado). 3. Obtener los metadatos de la firma y realizar la solicitud de firma. 4. Redirigir al usuario a la aplicación AFC_Cliente ATENCIÓN 16 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente Todos los ejemplos mostrados a continuación han sido planteados dentro de una aplicación en los ámbitos de FrameWork 2.0. Sin embargo, el código de ejemplo es fácilmente extraible para ser usado en otros frameworks java de desarrollo web. 4.2. INSTANCIACION DEL SERVICIO DE AFC SERVIDOR A continuación se muestra un ejemplo de instanciación del servicio AfcOpServidorService: Ejemplo de instaciación de AfcOpServidorService import util.services.Fw2ServiceUtil; import atlas.eadm.services.AfcOpServidorService; ... AfcOpServidorService afcService = Fw2ServiceUtil.getInstance().getAfcOpServidorService(); A partir de ahora una vez que tenemos el objeto de la clase AfcOpServidorService este servicio se utiliza igual en todos los frameworks. Las variables de configuración necesarias para la correcta instanciación del servicio son (con datos de prueba para desarrollo): Variables de configuración para el servicio AfcOpServidorService afc.servidor.endpoint = http://deswebservices.madrid.org/afc_ws/services/ServicioAFCServidor afc.modulo = EJPL afc.password = 07d818957a3fa16671165a836732cd6bc23c0008f520e3c9642fd06cce762eac Este servicio nos permite utilizar los métodos de operaciones de firma en Servidor de AFC. 4.3. INSTANCIACION DEL SERVICIO DE AFC CERTIFICADO A continuación se muestra un ejemplo de instanciación del servicio AfcOpCertificadoService: Ejemplo de instaciación de AfcOpCertificadoService import util.services.Fw2ServiceUtil; import atlas.eadm.services.AfcOpCertificadoService; ... AfcOpCertificadoService afcCertificadoService = Fw2ServiceUtil.getInstance().getAfcOpCertificadoService(); 17 de 18 Framework 2/ Framework Justicia Servicios de Firma AFC Cliente A partir de ahora una vez que tenemos el objeto de la clase AfcOpCertificadoService este servicio se utiliza igual en todos los frameworks. Las variables de configuración necesarias para la correcta instanciación del servicio son (con datos de prueba para desarrollo): Variables de configuración para el servicio AfcOpCertificadoService afc.servidor.endpoint = http://deswebservices.madrid.org/afc_ws/services/ServicioAFCCertificado afc.modulo = EJPL afc.password = 07d818957a3fa16671165a836732cd6bc23c0008f520e3c9642fd06cce762eac trazas.nivel.atlas=INFO Este servicio nos permite utilizar los métodos de operaciones de firma en Servidor de AFC. 5. ENLACES RELACIONADOS Producto URL Axis2 http://ws.apache.org/axis2/ Certificados ICM http://desarrollo.madrid.org/certificados/ Descarga certificados de prueba http://desarrollo.madrid.org/certificados/descarga_de_certificados.htm 18 de 18