Desarrollo de Servicios para la gestión de aplicaciones Marvin Yair Tolentino Perez José Abdiel Domínguez León Nombre Completo del Colaborador (Opcional) Ingeniera en Desarrollo y Gestión de Software [email protected] Puesto, Área Académica [email protected] u.mx Puesto, Área Académica [email protected] El presente documento describe el desarrollo de un sistema de gestión de aplicaciones mediante una API REST, implementada con Grails Framework, Spring Security y GORM Hibernate, con MySQL como base de datos. El proyecto surge ante la necesidad de una empresa de centralizar la administración de sus aplicaciones, optimizando el monitoreo, control y mantenimiento de estos servicios de manera eficiente. El desarrollo del sistema se llevó a cabo utilizando Grails 3.3.5, un framework basado en Groovy y diseñado para la creación ágil de aplicaciones web. La seguridad se implementó con Spring Security y Spring Security REST, permitiendo un sistema de autenticación basado en Bearer Token para el acceso a los recursos protegidos. Además, se utilizó GORM Hibernate como capa de persistencia, facilitando la interacción con la base de datos MySQL. Durante la implementación, se configuraron variables de entorno, perfiles de ejecución y conexiones seguras con la base de datos, asegurando un entorno de desarrollo escalable y adaptable a futuras necesidades. Se establecieron mecanismos para la autenticación y autorización de usuarios, garantizando la integridad y confidencialidad de los datos. Los resultados obtenidos permiten a la empresa mejorar la gestión de sus aplicaciones, reducir tiempos de respuesta en la solución de problemas y optimizar los recursos técnicos. Este desarrollo sienta las bases para futuras ampliaciones, como la integración de monitoreo en tiempo real y automatización de tareas administrativas, contribuyendo a la eficiencia operativa del negocio. Palabras Clave – Base de datos Grails Framework Groovy REST API Spring Security This document describes the development of an application management system through a REST API, implemented using Grails Framework, Spring Security, and GORM Hibernate, with MySQL as the database. The project addresses the company's need to centralize the management of its applications, optimizing monitoring, control, and maintenance of these services efficiently. The system was developed using Grails 3.3.5, a Groovy-based framework designed for rapid web application development. Security was implemented with Spring Security and Spring Security REST, enabling an authentication system based on Bearer Token for accessing protected resources. Additionally, GORM Hibernate was used as the persistence layer, simplifying database interactions with MySQL. During implementation, environment variables, execution profiles, and secure database connections were configured to ensure a scalable development environment adaptable to future needs. Authentication and authorization mechanisms were established to guarantee data integrity and confidentiality. The results allow the company to enhance application management, reduce response times in issue resolution, and optimize technical resources. This development lays the foundation for future expansions, such as the integration of real-time monitoring and automation of administrative tasks, contributing to the business's operational efficiency. . Keywords – Data Base Grails Framework Groovy REST API Spring Security I. INTRODUCCIÓN En la era digital, el desarrollo de software ha evolucionado significativamente, impulsado por la creciente demanda de aplicaciones eficientes, escalables y seguras. Las organizaciones requieren herramientas que optimicen sus procesos, faciliten la integración de datos y mejoren la experiencia del usuario. En este contexto, la gestión eficiente de aplicaciones se ha convertido en un pilar clave dentro de la arquitectura de software empresarial. Sin embargo, muchas empresas enfrentan desafíos en la implementación de soluciones tecnológicas que permitan una administración ágil y segura de sus sistemas. Problemas como la complejidad en el desarrollo, la falta de estandarización y las dificultades en la integración de bases de datos pueden impactar negativamente en la operatividad y escalabilidad de las aplicaciones. Por ello, es fundamental contar con tecnologías que simplifiquen estos procesos y garanticen un desarrollo más estructurado y eficiente. Los frameworks de desarrollo han surgido como una solución para enfrentar estos desafíos, proporcionando herramientas que automatizan tareas repetitivas, estructuran el código y fomentan buenas prácticas. En este sentido, Grails se ha posicionado como una opción robusta para la construcción de aplicaciones web y servicios RESTful, destacando por su integración con bases de datos relacionales como MySQL y su compatibilidad con la Máquina Virtual de Java (JVM). Inspirado en Ruby on Rails, Grails ofrece una sintaxis simplificada y una curva de aprendizaje accesible, lo que lo convierte en una alternativa atractiva para desarrolladores que buscan productividad sin sacrificar flexibilidad. Por su parte, MySQL es uno de los sistemas de gestión de bases de datos relacionales más utilizados en el ámbito del desarrollo de software, gracias a su rendimiento, fiabilidad y facilidad de uso. Su integración con Grails permite la creación de aplicaciones altamente escalables y con una sólida persistencia de datos, asegurando una gestión eficiente de la información en entornos de producción. Dado este panorama, el presente trabajo tiene como objetivo desarrollar servicios para la gestión de aplicaciones utilizando Grails y MySQL, abordando aspectos clave como la arquitectura de software, la implementación de servicios web, la seguridad y el despliegue en entornos productivos. Se analizará el proceso de configuración del entorno de desarrollo, la definición de modelos de datos, la creación de controladores y servicios, así como la implementación de estrategias de autenticación y autorización para garantizar la protección de datos y usuarios. Con ello, se busca ofrecer una solución tecnológica que facilite la gestión de aplicaciones y contribuya a mejorar la eficiencia en los procesos empresariales. II. OBJETIVO GENERAL Implementar servicios API REST utilizando Grails Framework, Spring Security y GORM Hibernate para optimizar la gestión de aplicaciones, mejorando la administración de datos y procesos mediante la integración de un modelo relacional con MySQL.. III. OBJETIVOS ESPECÍFICOS Diseñar e implementar servicios API REST con Grails Framework para la gestión eficiente de aplicaciones. Definir y establecer una arquitectura orientada a servicios que optimice la escalabilidad y mantenimiento de la aplicación. Desarrollar endpoints RESTful que permitan la comunicación eficiente y segura con la base de datos. Implementar mecanismos de autenticación y autorización mediante Spring Security para controlar el acceso a los servicios. Configurar y gestionar roles y permisos de usuario para garantizar la seguridad de los recursos en la aplicación. Aplicar buenas prácticas en la gestión de credenciales y cifrado de datos para fortalecer la protección de la información . • Utilizar el ORM de Grails (GORM Hibernate) para garantizar una persistencia de datos eficiente y escalable. Configurar MySQL como base de datos principal, asegurando integridad y optimización en las consultas. IV. PLANTEAMIENTO DEL PROBLEMA En la actualidad, la empresa enfrenta serias dificultades en la gestión de sus aplicaciones debido a la ausencia de un sistema centralizado que permita monitorear y administrar eficientemente estos recursos. La información sobre las aplicaciones, sus configuraciones y su estado operativo se encuentra dispersa en distintos sistemas independientes o incluso en registros manuales, lo que genera una serie de problemas operativos y técnicos que afectan la productividad y la calidad del servicio. Entre los principales inconvenientes que derivan de esta falta de centralización se encuentran: Ineficiencia en el mantenimiento y resolución de problemas técnicos: La falta de un punto de control único dificulta la identificación rápida de incidencias, lo que retrasa las soluciones y afecta la continuidad operativa. Pérdida de tiempo en la identificación del estado de las aplicaciones y servidores: Los equipos de soporte deben acceder a múltiples sistemas o realizar consultas manuales para obtener información sobre las aplicaciones, lo que ralentiza la toma de decisiones. Riesgo de interrupciones en los servicios ofrecidos a los clientes: La imposibilidad de detectar y prevenir problemas con anticipación puede generar caídas inesperadas, afectando la disponibilidad y confiabilidad de las aplicaciones. Para abordar estos problemas, se propone el desarrollo de una API REST centralizada utilizando Grails Framework, Spring Security y GORM Hibernate, con el objetivo de gestionar de manera eficiente las aplicaciones de la empresa. Esta API permitirá consolidar la información en un solo sistema, mejorando la operación de los equipos de desarrollo y soporte técnico. A través de la implementación de esta solución, la empresa podrá: Optimizar la gestión y monitoreo de aplicaciones mediante una plataforma accesible y estructurada. Escalar el sistema de manera flexible, permitiendo la incorporación de nuevas funcionalidades como monitoreo avanzado y análisis predictivo. Este proyecto busca proporcionar una solución integral y escalable que permita a la empresa mejorar la eficiencia operativa, reducir los tiempos de inactividad y garantizar la continuidad de sus servicios, aprovechando el poder de Grails y MySQL para desarrollar una infraestructura robusta, segura y adaptable a futuras necesidades. V. JUSTIFICACIÓN El desarrollo de un sistema de gestión de aplicaciones mediante una API REST basada en Grails Framework, Spring Security y GORM Hibernate es una solución fundamental para optimizar el monitoreo, control y administración de los servicios digitales en la empresa. La creciente complejidad de los entornos tecnológicos y la necesidad de garantizar la continuidad operativa de las aplicaciones hacen imprescindible la implementación de un sistema centralizado, seguro y escalable. Actualmente, la empresa enfrenta dificultades en la administración de sus aplicaciones debido a la dispersión de información en distintos sistemas, registros manuales o herramientas aisladas que no permiten un control eficiente. Este problema genera ineficiencia operativa, retrasos en la resolución de incidencias y un mayor riesgo de fallos críticos, lo que puede afectar directamente la calidad del servicio ofrecido a los clientes. La justificación de este proyecto radica en los siguientes aspectos clave: La centralización de la información permitirá reducir tiempos de búsqueda y gestión de datos sobre el estado de las aplicaciones y servidores. Se optimizará la administración de recursos tecnológicos, facilitando la coordinación entre los equipos de desarrollo y soporte. Automatizar notificaciones y alertas para una detección temprana de fallos o anomalías en los sistemas. Se implementará un sistema de registro de eventos que facilitará el análisis de incidencias y la toma de decisiones basada en datos históricos. Reducir el tiempo de respuesta ante incidencias, mejorando la eficiencia del soporte técnico. Garantizar la seguridad y control de acceso a la información mediante la integración de Spring Security. A través de Spring Security, se establecerán mecanismos de autenticación y autorización que garanticen la protección de los datos y el acceso controlado a los servicios. Se implementará un modelo de roles y permisos para asegurar que solo usuarios autorizados puedan gestionar las aplicaciones y modificar configuraciones críticas. La arquitectura basada en Grails y GORM Hibernate permitirá una fácil expansión del sistema, incorporando nuevas funcionalidades según las necesidades futuras de la empresa. La compatibilidad con MySQL garantizará una gestión eficiente de grandes volúmenes de datos, asegurando un rendimiento óptimo incluso en entornos de alta demanda. Minimizar los tiempos de inactividad de las aplicaciones evitará interrupciones en los servicios ofrecidos a los clientes. La capacidad de reacción ante incidencias críticas mejorará significativamente, evitando pérdidas económicas y afectaciones en la reputación de la empresa. Llevar acabo la implementación de esta API REST no solo soluciona los problemas actuales en la gestión de aplicaciones, sino que también proporciona una infraestructura escalable y segura que permitirá a la empresa optimizar sus operaciones tecnológicas y garantizar un servicio de calidad. La combinación de Grails, Spring Security y GORM Hibernate ofrece una solución innovadora y eficiente para mejorar la administración de los sistemas, promoviendo la transformación digital y la mejora continua en la organización. VI. METODOLOGÍA Y PROCEDIMIENTOS El desarrollo del proyecto se basará en metodologías ágiles, específicamente Scrum, debido a su flexibilidad y capacidad de adaptación a cambios en los requisitos. Esta metodología permite una planificación iterativa, donde el desarrollo se organiza en sprints de duración determinada, con entregables funcionales en cada ciclo. Además, se empleará la arquitectura basada en microservicios para garantizar escalabilidad y mantenibilidad del sistema. Los servicios desarrollados estarán estructurados bajo principios de API RESTful, lo que facilitará la interoperabilidad con otras aplicaciones dentro de la empresa. El proyecto se desarrollará en cinco fases principales, asegurando un flujo estructurado y eficiente en la construcción de la API de gestión de aplicaciones: 1. Análisis y recopilación de requisitos Identificación de problemas actuales en la gestión de aplicaciones. Definición de funcionalidades clave de la API REST. Establecimiento de criterios de seguridad con Spring Security. Especificación de reglas de negocio y permisos de acceso. 2. Diseño de la solución Modelado de la base de datos en MySQL. Definición de la arquitectura del sistema y sus componentes. Creación de diagramas UML: casos de uso, clases y flujo de datos. Diseño de la API REST siguiendo principios de buenas prácticas RESTful. 3. Desarrollo e implementación Configuración del entorno de desarrollo con Grails Framework. Creación de modelos y repositorios con GORM Hibernate. Implementación de endpoints REST para gestión de aplicaciones. Integración de Spring Security para control de acceso. Pruebas unitarias y de integración para garantizar funcionalidad. 4. Pruebas y validación Pruebas funcionales para validar cada módulo del sistema. Pruebas de seguridad para garantizar acceso restringido a datos sensibles. Evaluación del rendimiento y optimización de consultas en MySQL. 5. Despliegue y documentación Implementación en un servidor de prueba y posterior despliegue en producción. Documentación de la API REST con herramientas como Swagger. Capacitación de los usuarios clave en el uso del sistema. o Dado que el proyecto se enfoca en el Desarrollo de Aplicaciones y Bases de Datos, se aplicarán las siguientes metodologías y estándares: Metodología Ágil Scrum → Para una gestión eficiente del desarrollo en ciclos iterativos. Arquitectura RESTful → Para garantizar interoperabilidad y modularidad en los servicios ORM con GORM Hibernate → Para una gestión eficiente de la persistencia de datos en MySQL Estándares de seguridad con Spring Security → Para el control de autenticación y autorización . Para el desarrollo del sistema se requieren los siguientes recursos: Herramientas de software: o Grails Framework (para desarrollo de la API). MySQL (como base de datos relacional). Spring Security (para autenticación y seguridad). o Git y GitLab (para control de versiones y trabajo colaborativo). Fig 1.4 Icono de GitLab Infraestructura: o Servidores locales o en la nube para el despliegue. o Acceso a una base de datos centralizada. A continuación, se muestra la distribución estimada de tiempos: Fig 1.1 Icono de mysql o Fig 1.3 Icono de Postman El desarrollo del proyecto se ha planificado en un periodo de 15 semanas, distribuidas en fases de análisis, diseño, desarrollo, pruebas y despliegue. Durante el proceso, se utilizarán métricas de desempeño para evaluar el cumplimiento de los tiempos establecidos. Fig 1.0 Icono de Grails Framework o Postman (para pruebas de endpoints). gestión de Fase Análisis de Requisitos Duración Estimada 2 semanas Diseño de Arquitectura 3 semanas Desarrollo de la API 6 semanas Pruebas y Validación 2 semanas Documentación y Despliegue 2 semanas Y por último para garantizar una correcta estructuración del sistema, se desarrollarán los siguientes diagramas: Fig 1.2 Icono de Spring Security Diagrama de Casos de Uso: Representación de los actores y funcionalidades del sistema. Diagrama de Clases: Estructura de los objetos y sus relaciones. Diagrama de Flujo de Datos: Representación de cómo circula la información en la API. Diagrama de Base de Datos: Modelo entidadrelación de MySQL con sus respectivas claves foráneas. VII. Configuración de la Conexión a la Base de Datos MySQL Modificar el archivo grails-app/conf/application.yml para definir la conexión a la base de datos MySQL: DESARROLLO DE PROYECTO Antes de iniciar el desarrollo de este proyecto, lo primero que se hizo fue la configuración del entorno de desarrollo con grails framework, java 8 y mysql 5.7. Se utilizaron las siguientes herramientas: Java 8: Requerido por Grails 3.3.5. Grails 3.3.5: Framework basado en Groovy para el desarrollo web. Gradle: Sistema de automatización de compilación. MySQL: Base de datos para el almacenamiento de usuarios. Spring Security: Para la autenticación y autorización de usuarios. Instalación de Java 8 Se debe instalar Java Development Kit (JDK) versión 8, ya que Grails 3.3.5 es compatible con esta versión. Se puede descargar el JDK desde la página oficial de Oracle o utilizar OpenJDK. Para verificar la instalación, ejecutar el siguiente comando en la terminal: java -version Debería mostrar un resultado similar a: java version "1.8.0_xxx" Ilustración 1.6 Configuracion para la conexion a base de datos Instalación de Dependencias de Spring Security y JWT Para garantizar el correcto funcionamiento del sistema y cumplir con los requerimientos de seguridad, conectividad y comunicación con servicios externos, es necesario integrar diversas dependencias en el proyecto Grails. A continuación, se detallan las principales bibliotecas utilizadas y su propósito dentro de la aplicación: Creacion de un nuevo proyecto con Grails 3.3.5 1. 2. Crear un nuevo proyecto con Grails utilizando el perfil API-REST: -- grails create-app gestion-apps --profile=rest-api Ingresar al directorio del proyecto: -- cd gestion-apps Ilustración 1.5 Comando basicos de grails Ilustración 1.7 Dependencias spring Security Conector MySQL – runtime "mysql:mysql-connectorjava:5.1.36" En este proyecto, la persistencia de datos se gestiona a través de MySQL, por lo que es necesario incluir el conector JDBC que permitirá la comunicación entre Grails y la base de datos. Función en el proyecto: Esta dependencia permite que la aplicación pueda realizar operaciones de lectura y escritura sobre MySQL, facilitando la gestión de información relacionada con las aplicaciones registradas en el sistema. Cómo funciona: Grails, a través de GORM (Grails Object Relational Mapping), se encarga de generar consultas SQL que posteriormente son interpretadas por este conector y enviadas a MySQL. Importancia: Sin esta dependencia, la aplicación no podría conectarse a la base de datos, lo que imposibilitaría el almacenamiento y consulta de información esencial, como los datos de las aplicaciones gestionadas y la autenticación de usuarios. Cliente HTTP – compile 'org.grails.plugins:http-builderhelper:1.1.0' En la arquitectura del sistema, es necesario que la aplicación pueda comunicarse con otros servicios web externos, ya sea para obtener información de monitoreo, consumir APIs de terceros o integrarse con sistemas adicionales. Función en el proyecto: Facilita la ejecución de peticiones HTTP (GET, POST, PUT, DELETE) de manera eficiente y estructurada. Cómo funciona: Este plugin encapsula las funciones del cliente HTTP para simplificar la interacción con APIs externas sin necesidad de manejar directamente conexiones y respuestas HTTP. Importancia: La gestión de aplicaciones en este sistema puede requerir la integración con servicios externos, como plataformas de monitoreo, sistemas de autenticación o registros centralizados. Gracias a esta dependencia, se pueden realizar estas conexiones de forma sencilla y eficiente. Dado que el proyecto se basa en una arquitectura REST, el uso de sesiones tradicionales no es la mejor opción para manejar autenticación. Para ello, se implementa Spring Security REST, que permite la autenticación basada en tokens en lugar de sesiones. Función en el proyecto: Permite la autenticación de usuarios mediante JSON Web Tokens (JWT). Proporciona endpoints seguros para iniciar sesión (/api/login) y cerrar sesión (/api/logout). Facilita la protección de rutas de la API mediante el uso de tokens de acceso. Cómo funciona: Cuando un usuario inicia sesión, la API genera un token JWT y lo devuelve en la respuesta. En cada petición posterior, el cliente debe incluir este token en la cabecera de autorización para acceder a los recursos protegidos. El servidor valida el token antes de conceder acceso al recurso solicitado. Importancia: En un entorno donde la aplicación será consumida por diferentes clientes (web, móviles u otros sistemas), la autenticación basada en tokens garantiza mayor seguridad y escalabilidad en la gestión de accesos. Uno de los aspectos más críticos en cualquier sistema es la seguridad. En este proyecto, la autenticación y autorización de usuarios se gestionan mediante Spring Security, el cual se integra directamente en Grails a través de este plugin. Función en el proyecto: Gestiona la autenticación de usuarios a través de credenciales almacenadas en la base de datos. Implementa un sistema de permisos basado en roles para restringir el acceso a diferentes secciones de la API. Protege rutas sensibles de la aplicación mediante configuraciones de seguridad avanzadas. Cómo funciona: Al recibir una solicitud, el sistema verifica si el usuario tiene una sesión válida y si cuenta con los permisos necesarios para acceder a un recurso. Importancia: Sin esta dependencia, cualquier usuario podría acceder libremente a los recursos del sistema, lo que representaría un riesgo de seguridad. Gracias a Spring Security Core, se puede controlar el acceso de manera eficiente y segura. Autenticación con Tokens – compile "org.grails.plugins:spring-security-rest:2.0.0.M2" Seguridad y Autenticación – compile "org.grails.plugins:spring-security-core:3.2.0" Los datos de autenticación se almacenan en la base de datos y son validados mediante Spring Security y GORM Hibernate. La integración de estas dependencias permite que la aplicación cuente con una arquitectura sólida, segura y escalable. La conexión a MySQL asegura la persistencia de los datos, el cliente HTTP facilita la integración con otros servicios, y la combinación de Spring Security Core con Spring Security REST proporciona un sistema de autenticación robusto y moderno, adaptado a las necesidades de una API REST. En cualquier proyecto desarrollado en Grails, toda la configuración del mismo la podemos encontrar en el directorio grails-app/conf. Básicamente, en este directorio hay cuatro archivos para configurar diferentes aspectos de una aplicación típica: Config.groovy, DataSource.groovy, BootStrap.groovy y UrlMappings.groovy. Config.groovy Contiene los parámetros de configuración general de nuestra aplicación e incluso podemos crear variables globales que estarán disponibles en todos los artefactos de la aplicación. DataSource.groovy Este archivo nos servirá para configurar el acceso a la base de datos utilizada por la aplicación. Grails puede trabajar en tres entornos: desarrollo, test y producción. Pues para cada uno de esos entornos, es posibles indicarle una base de datos diferente. BootStrap.groovy Este archivo contiene una clase llamada en la que a su vez se definen los métodos init() y destroy(). Estos métodos se ejecutarán al arrancar y al parar nuestra aplicación respectivamente. Habitualmente, el método se init() se utiliza para insertar una serie de datos en la aplicación, mientras que el método destroy() lo podemos utilizar para eliminarlos y dejar la base de datos en un estado conocido. UrlMappings.groovy Por defecto en Grails, las direcciones tienen el siguiente aspecto: http://localhost:8080/biblioteca/usuario/edit/1, donde: localhost, es el nombre del servidor 8080, es el puerto utilizado biblioteca, es el nombre de la aplicación usuario, es el controlador que se encarga de procesar la petición edit, es el método del controlador 1, es el identificador que se pasa por parámetro Sin embargo, podemos modificar este comportamiento por defecto de Grails creando nuevas reglas en el archivo. A. Implementación de seguridad mediante barer tokens La seguridad en las aplicaciones web y móviles es un aspecto fundamental para garantizar la protección de los datos de los usuarios y la integridad del sistema. Con el crecimiento de las aplicaciones basadas en arquitecturas distribuidas y microservicios, se requiere un mecanismo de autenticación que sea seguro, eficiente y escalable. Una de las mejores prácticas en la autenticación de APIs es el uso de Bearer Tokens, especialmente mediante JSON Web Tokens (JWT). Esta técnica permite gestionar el acceso de los usuarios de manera eficiente, eliminando la dependencia de sesiones almacenadas en el servidor y mejorando la interoperabilidad con distintos clientes. Autenticación sin Estado y su Importancia A diferencia de los mecanismos tradicionales de autenticación basados en sesiones, donde el estado de la autenticación se mantiene en el servidor, el uso de Bearer Tokens con JWT proporciona una autenticación sin estado. Esto significa que: Eliminación del almacenamiento de sesiones en el servidor Reduce el riesgo de ataques como session hijacking (secuestro de sesión). Disminuye la sobrecarga en la base de datos y en la memoria del servidor. Autenticación basada en tokens firmados El usuario recibe un token firmado digitalmente, el cual contiene la información de autenticación y los permisos asociados. Los tokens están cifrados y firmados, lo que impide su manipulación por parte de atacantes. Mayor escalabilidad y compatibilidad con microservicios Cada solicitud HTTP incluye el token en la cabecera Authorization: Bearer <token>, lo que permite que los servidores no tengan que compartir información de sesión. Se facilita la distribución de carga entre múltiples servidores sin necesidad de mecanismos adicionales para sincronizar sesiones. B. Ventajas de la autenticación con bearer token Las aplicaciones modernas desarrolladas con frameworks como Vue.js, React o Angular requieren autenticación basada en Bearer Token, ya que proporciona una integración más sencilla y segura. En entornos de microservicios, la autenticación con JWT es una práctica recomendada, ya que simplifica la gestión de usuarios y facilita la interoperabilidad entre servicios sin comprometer la seguridad. VIII. Independencia de Cookies A diferencia de los métodos basados en sesiones, el uso de JWT no requiere almacenar cookies, evitando problemas de compatibilidad en entornos móviles o en aplicaciones web con CORS (Cross-Origin Resource Sharing). Reutilización de Tokens en Múltiples Servicios Los tokens permiten la autenticación en múltiples servicios o aplicaciones sin necesidad de iniciar sesión repetidamente. Compatibilidad con Aplicaciones Móviles y PWA (Progressive Web Apps) Los tokens pueden ser almacenados de forma segura en el dispositivo, permitiendo a las aplicaciones móviles autenticar al usuario sin necesidad de conexiones constantes con el servidor. C. Autorización y control de acceso con jwt Uno de los mayores beneficios del uso de JWT es la capacidad de almacenar información relevante dentro del token, lo que permite implementar sistemas avanzados de autorización. Autorización basada en roles (RBAC - Role-Based Access Control) Un administrador puede tener más privilegios que un usuario estándar, y esto se define directamente en el payload del token. Scopes y permisos específicos Un usuario puede acceder solo a ciertos endpoints o funcionalidades dependiendo de los permisos definidos en su token. Expiración y Revocación de Tokens Se pueden definir tiempos de expiración para cada token, reduciendo el riesgo en caso de robo. Implementación de mecanismos de refresh tokens para extender sesiones de manera segura. Implementar un sistema de autenticación basado en Spring Security y JWT no solo mejora la seguridad del sistema, sino que también optimiza su escalabilidad, facilita la integración con clientes móviles y protege contra amenazas comunes en aplicaciones web. Además, permite desarrollar sistemas flexibles, modernos y eficientes, en los que la autenticación no represente una limitante para el crecimiento de la aplicación. RESULTADOS En este apartado deberá redactarse los resultados y entregables obtenidos, haciendo la comparativa de un antes y un después en las actividades cotidianas de la empresa, es importante denotar aquellas fortalezas, debilidades, oportunidades y amenazas. IX. CONCLUSIONES Reflexión comparativa entre la problemática y los resultados, el alumno deberá evaluar si los objetivos fueron o no alcanzados. X. RECOMENDACIONES Indicaciones que en base a la experiencia el alumno deja sobre el contexto del problema, los recursos o los entregables generados con la finalidad de promover la mejora continua de la empresa. XI. REFERENCIAS [1] G. Rocher, "Grails Framework," Grails Foundation, 2025. [Online]. Available: https://grails.org/documentation.html [2] G. Rocher, "The Grails Framework 6.2.3," Grails Foundation, 2025. [Online]. Available: https://docs.grails.org/6.2.3/guide/single.html [3] Pivotal Software, "Spring Boot Reference Guide," Spring.io, 2025. [Online]. Available: https://docs.spring.io/spring-boot/reference/index.html [4] Pivotal Software, "Spring Boot Documentation Overview," Spring.io, 2025. [Online]. Available: https://docs.spring.io/spring-boot/documentation.html [5] B. Alex, L. Taylor, R. Winch, G. Hillert, J. Grandja, and J. Bryant, "Spring Security Reference," Spring.io, 2025. [Online]. Available: https://docs.spring.io/springsecurity/site/docs/5.0.x/reference/html/index.html [6] Pivotal Software, "Spring Security Overview," Spring.io, 2025. [Online]. Available: https://docs.spring.io/springsecurity/reference/index.html [7] G. Rocher, "GORM for Hibernate Manual," Grails Foundation, 2025. [Online]. Available: https://gorm.grails.org/latest/hibernate/manual/ [8] G. Rocher, "Object Relational Mapping (GORM) 6.2.3," Grails Foundation, 2025. [Online]. Available: https://docs.grails.org/latest/guide/GORM.html [9] W3Schools, "SQL FOREIGN KEY," W3Schools, 2025. [Online]. Available: https://www.w3schools.com/SQL/sql_ref_foreign_key.asp [10] Stack Overflow, "FOREIGN KEY y REFERENCES SQL (MySQL)," Stack Overflow en español, 2025. [Online]. Available: https://es.stackoverflow.com/questions/242885/foreign-keyy-references-sql-mysql [11] Oracle Corporation, "MySQL 8.0 Reference Manual," Oracle, 2025. [Online]. Available: https://dev.mysql.com/doc/refman/8.0/en/ [12] Oracle Corporation, "MySQL FOREIGN KEY Constraint," Oracle, 2025. [Online]. Available: https://www.w3schools.com/mysql/mysql_foreignkey.asp [13] Oracle Corporation, "MySQL Server Version Reference," Oracle, 2025. [Online]. Available: https://dev.mysql.com/doc/mysqld-version-reference/en/ [14] Oracle Corporation, "MySQL Documentation," Oracle, 2025. [Online]. Available: https://dev.mysql.com/doc/ [15] Apache Software Foundation, "The Apache Groovy Programming Language - Documentation," Apache, 2025. [Online]. Available: http://groovylang.org/documentation.html [16] Apache Software Foundation, "Groovy Reference Documentation," Apache, 2025. [Online]. Available: http://www.groovy-lang.org/single-page-documentation.html XII. GLOSARIO API (Application Programming Interface): Conjunto de reglas y protocolos que permiten la comunicación entre diferentes aplicaciones o sistemas de software. REST (Representational State Transfer): Estilo de arquitectura para el desarrollo de servicios web que se basa en el uso de recursos identificados por URLs y operaciones HTTP. Grails Framework: Framework de desarrollo web basado en Groovy que facilita la creación de aplicaciones mediante la convención sobre configuración y la integración con diversas herramientas. Spring Security: Framework de seguridad para aplicaciones Java que permite la autenticación y autorización de usuarios en sistemas web. Spring Security REST: Extensión de Spring Security que permite la autenticación a través de tokens en aplicaciones RESTful. Middleware: Capa intermedia de software que facilita la comunicación y gestión de datos entre aplicaciones o sistemas. Token JWT (JSON Web Token): Formato compacto y seguro para representar información entre partes, utilizado en la autenticación y autorización de usuarios en APIs. Desarrollo ágil: Metodología de desarrollo de software basada en la entrega incremental y la colaboración entre equipos de trabajo para adaptarse rápidamente a los cambios. Entorno de desarrollo: Conjunto de herramientas, configuraciones y tecnologías utilizadas para programar, probar y ejecutar una aplicación antes de su despliegue. Variables de entorno: Parámetros configurables del sistema utilizados para almacenar información sensible, como credenciales de bases de datos y claves de seguridad. Perfil API-REST: Configuración específica de Grails utilizada para desarrollar aplicaciones orientadas a servicios web con arquitectura RESTful. Bearer Token: Método de autenticación basado en el envío de un token en el encabezado de las solicitudes HTTP, utilizado para acceder a recursos protegidos en una API. Seguridad informática: Conjunto de medidas y técnicas utilizadas para proteger la información y los sistemas frente a accesos no autorizados o amenazas cibernéticas. GORM (Grails Object Relational Mapping): Capa de persistencia en Grails que facilita la interacción con bases de datos mediante un enfoque orientado a objetos. Optimización de recursos: Estrategias utilizadas para mejorar el uso eficiente de memoria, procesamiento y almacenamiento en una aplicación. Hibernate: Framework de mapeo objeto-relacional (ORM) para Java que permite la gestión de bases de datos de manera eficiente y transparente. Controlador (Controller): Componente del patrón MVC (Modelo-Vista-Controlador) encargado de recibir las solicitudes del usuario, procesarlas y devolver la respuesta adecuada. MySQL: Sistema de gestión de bases de datos relacional utilizado para almacenar y administrar la información de la aplicación. Autenticación: Proceso de verificación de identidad de un usuario o sistema antes de permitir el acceso a recursos restringidos. Autorización: Proceso mediante el cual se determinan los permisos de un usuario sobre determinados recursos dentro de un sistema. Escalabilidad: Capacidad del sistema para manejar un crecimiento en la cantidad de usuarios o datos sin degradar su rendimiento. Servicio (Service): Componente de la aplicación encargado de la lógica de negocio, que permite separar la lógica del controlador para mejorar la mantenibilidad del código. Validación de datos: Proceso de asegurarse de que los datos ingresados en la aplicación cumplen con ciertos criterios antes de ser procesados o almacenados. Gestión de Errores: Proceso de manejo de excepciones y errores dentro de una aplicación para evitar fallos críticos y mejorar la estabilidad del sistema. CORS (Cross-Origin Resource Sharing): Mecanismo de seguridad que permite o restringe las solicitudes HTTP realizadas desde dominios diferentes al de la API. Control de Versiones: Sistema utilizado para gestionar cambios en el código fuente de la aplicación, como Git y sus herramientas asociadas (GitHub, GitLab, Bitbucket). Configuración de Rutas (Routing): Definición de las URLs y métodos HTTP que serán manejados por la API para cada recurso del sistema. CRUD (Create, Read, Update, Delete): Conjunto de operaciones básicas utilizadas en bases de datos y sistemas de información para la manipulación de datos. Groovy: Lenguaje de programación dinámico basado en Java que se utiliza en Grails para simplificar el desarrollo de aplicaciones web, proporcionando una sintaxis más flexible y expresiva. Interceptor: Componente de Grails que permite ejecutar lógica antes o después de la ejecución de una acción dentro de un controlador, útil para validaciones, seguridad y manipulación de solicitudes. Anotación: Mecanismo en Java y Groovy que permite agregar metadatos al código fuente para influir en su comportamiento en tiempo de ejecución o compilación, utilizado en frameworks como Spring y Grails. Logs: Registros generados por la aplicación que contienen información sobre eventos, errores y actividades del sistema, utilizados para depuración, monitoreo y análisis de rendimiento. Postman: Herramienta utilizada para diseñar, probar y documentar API REST, permitiendo enviar solicitudes HTTP, validar respuestas y automatizar pruebas. ANEXOS A continuación, se enlistan las recomendaciones de formato para la elaboración del reporte final de la Estadía Técnica Preparación técnica del trabajo Por favor, use guiones automáticos y revise su ortografía. Además, asegúrese de que sus oraciones estén completas y de que haya continuidad en sus párrafos. Verifique la numeración de sus gráficos (figuras y tablas) y asegúrese de que se incluyan todas las referencias apropiadas. A. B. Plantilla Este documento fue diseñado para ser utilizado como una plantilla. Luego puede escribir sobre las secciones del documento, cortar y pegar en él (Edición | Pegado especial | Texto sin formato), y / o utilizar estilos de marcado. El menú desplegable de estilos está a la izquierda de la barra de herramientas de formato en la parte superior de la ventana de Word (por ejemplo, el estilo en este punto del documento es "Texto"). Resalte una sección que desee designar con un cierto estilo, luego seleccione el nombre apropiado en el menú de estilos. Formato El formato de documento está basado en dos columnas ilustrado por este documento de plantilla. Ocasionalmente, los autores encuentran problemas con el contenido que no se ajusta convenientemente al formato de dos columnas. Es aceptable cambiar secciones cortas del manuscrito a una sola columna para acomodar figuras o ecuaciones que no encajen en una sola columna de una página de doble columna (es decir, para que el material abarque ambas columnas en la página). Y también es aceptable rotar figuras individuales 90o en sentido contrario a las agujas del reloj para encajar en una página completa. Sin embargo, el texto nunca debe rotarse en la página. Establezca los márgenes superior e inferior en 25,4 mm (1 pulgada) y los márgenes izquierdo y derecho en aproximadamente 18 mm (0,7 pulgadas). No viole los márgenes (es decir, el texto, las tablas, las figuras y las ecuaciones pueden no extenderse a los márgenes). El ancho de la columna es de 88 mm (3,45 pulgadas). El espacio entre las dos columnas es de 5 mm (0.2 pulgadas). La sangría del párrafo es de 5 mm. Utilice la justificación completa. Utilice uno o dos espacios entre secciones, y entre texto y tablas o figuras, para ajustar la longitud de la columna. No incluya encabezados, pies de página o números de página. En general, el uso del color debe limitarse únicamente a las figuras. El texto puede no estar en color, y el sombreado de colores nunca es aceptable. Tipografías y tamaños Utilice un tipo de letra proporcional de serif como Times Roman o Times New Roman e incruste todas las fuentes. La Tabla I proporciona ejemplos de los tamaños y estilos de tipo apropiados para usar. E. TABLA I EJEMPLOS DE TIPOGRAFÍA TIMES ROMAN TAMAÑOS Y ESTILOS Type Apariencia size Italic Regular Bold (pts) 6 Tabla subíndices y superíndices 8 Referencias, tablas, nombres de tablas *, leyendas de figuras, notas al pie, subíndices de texto y superíndices 9 Resumen 10 SECCIÓN DE TÍTULOS *, TEXTO PRINCIPAL, AFILIACIONES DE AUTORES, ECUACIONES 14 Nombres de Autor C. D. Uso de Color Llas cifras deben diseñarse para ser legibles cuando se reducen a escala de grises. Subtítulos Título del Reporte *Small caps Encabezados de sección Un encabezado de sección principal se enumera mediante un número romano seguido de un punto y se centra sobre el texto. Un título primario debe estar en mayúsculas. El encabezado de una sección secundaria se enumera con una letra mayúscula seguida de un punto y se coloca a la izquierda sobre la sección. La primera letra de cada palabra importante se escribe con mayúscula y el encabezado está en cursiva. Un encabezado de sección terciaria se enumera mediante un número arábigo seguido de un paréntesis. Tiene sangría y es seguido por dos puntos. La primera letra de cada palabra importante se escribe con mayúscula y el encabezado está en cursiva. Un encabezado de sección cuaternaria rara vez es necesario, pero es perfectamente aceptable si es necesario. Se enumera mediante una letra minúscula seguida de un paréntesis. Tiene sangría y es seguido por dos puntos. Solo la primera letra del encabezado se escribe con mayúscula y el encabezado está en cursiva. F. G. Figuras y Tablas Las etiquetas de eje de figura son a menudo una fuente de confusión. Trate de usar palabras en lugar de símbolos. Como ejemplo, escriba la cantidad "Magnetización" o "Magnetización, M", no solo "M". Pon las unidades entre paréntesis. No etiquete los ejes solamente con las unidades. Como en la Fig. 1, escriba "Magnetización (kA / m)" o "Magnetización (kA · m-1)," no solo "kA / m". No etiquetar ejes con una relación de cantidades y unidades. Por ejemplo, escriba "Temperatura (K)", no "Temperatura / K". Las etiquetas de las figuras deben ser legibles, aproximadamente del tipo de 8 a 10 puntos. Las figuras y tablas grandes pueden abarcar ambas columnas, pero no pueden extenderse a los márgenes de la página. Las leyendas de las figuras deben estar debajo de las figuras; los títulos de las tablas deben estar por encima de las tablas. No coloque subtítulos en "cuadros de texto" vinculados a las figuras. No pongas bordes alrededor de tus figuras. Todas las figuras y tablas deben estar ubicadas en el texto cerca, pero no antes, donde se mencionan por primera vez. Use la abreviatura "Fig. 1", incluso al principio de una oración. Enumeración Numere las citas de referencia consecutivamente entre corchetes [1]. La puntuación de la oración sigue los corchetes [2]. Las referencias múltiples [2], [3] están numeradas con corchetes separados [1] - [3]. Consulte simplemente el número de referencia, como en [3]. No use "Ref. [3]" o "referencia [3]" excepto al comienzo de una oración: "La referencia [3] muestra ...". Numere las notas al pie por separado con superíndices (Insertar | Nota al pie). Coloque la nota al pie en la parte inferior de la columna en la que se cita. No ponga notas al pie en la lista de referencia. Use letras para las notas de pie de mesa. Compruebe que todas las figuras y tablas estén numeradas correctamente. Usa números arábigos para figuras y números romanos para tablas. Las figuras y tablas del apéndice deben numerarse consecutivamente con las figuras y tablas que aparecen en el resto del documento. No deben tener su propio sistema de numeración. H. I. Fig. 1. Magnetización en función del campo aplicado. Tenga en cuenta que "Fig." se abrevia y hay un período después del número de figura seguido de dos espacios La leyenda está centrada en la columna. Las figuras compuestas contienen dos o más elementos en una sola figura numerada. Los elementos dentro de una figura compuesta pueden ser numerados individualmente, y pueden mencionarse en el texto mediante ese número (por ejemplo, Fig. 1a). Sin embargo, si agrega una figura a su manuscrito antes de enviarlo, asegúrese de asignar a esa figura una identificación única, y renumerar las otras figuras y sus invocaciones, según sea necesario. El proceso de incrustar figuras (y tablas) en el manuscrito depende de las restricciones impuestas por la herramienta de procesamiento de textos utilizada para crear el manuscrito. En general, existen dos enfoques para incrustar figuras en un documento de Word: Insertar | Imágenes_ o la copia | Pegar el enfoque. Insertar | Las imágenes casi siempre tienen éxito, y los gráficos pueden originarse como archivos .jpg, .gif, .bmp, .eps o .tif. Copia | Pegar es más probable que tenga éxito si se elige la opción "Pegado especial", y las cifras se incrustan como "metarchivos mejorados". Es una buena idea probar la integridad de sus figuras haciendo una destilación en pdf antes de enviar el manuscrito con Adobe Acrobat. Unidades de Medida Se recomienda encarecidamente el uso de unidades métricas en el documento utilizando el Sistema Internacional de Unidades ("Système International d'Unités" o Unidades SI). Este sistema incluye un subsistema de unidades basado en el medidor, kilogramo, segundo y amperio (MKSA). Las unidades británicas se pueden usar como unidades secundarias (entre paréntesis). Una excepción es cuando las unidades británicas se utilizan como identificadores en el comercio, como una unidad de disco de 3,5 pulgadas. Abreviaciones y Acrónimos Defina abreviaturas y acrónimos menos comunes la primera vez que se utilizan en el texto, incluso después de que se hayan definido en el resumen. No deben definirse abreviaturas como IEEE, SI, MKS, CGS, AC, DC y rms. No utilice abreviaturas en el título a menos que sean inevitables. J. Matemática y Ecuaciones Use el Editor de ecuaciones de Microsoft o el complemento comercial MathType para MS Word para todos los objetos matemáticos en su papel (Insertar | Objeto | Crear Nuevo | Ecuación de Microsoft o Ecuación de MathType). "Flotante sobre texto" no debe seleccionarse. Para hacer que sus ecuaciones sean más compactas, puede usar solidus (/), la función exp o los exponentes apropiados. Escriba en cursiva los símbolos romanos para cantidades y variables, pero no símbolos griegos. Use un guion largo en lugar de un guion para un signo menos. Usa paréntesis para evitar ambigüedades en los denominadores. Numere las ecuaciones consecutivamente con los números de las ecuaciones entre paréntesis al ras del margen derecho, como en (1). Asegúrese de que los símbolos en su ecuación hayan sido definidos antes de que aparezca la ecuación o K. inmediatamente después. . J 3E A 2 I F I B I C A I A1 AI A 2 I A 0 Z1 Z 2 (1) donde IF es la corriente de falla. Use "(1)", no "Eq. (1)" o "ecuación (1)", excepto al comienzo de una oración: "La ecuación (1) es ...". L. Originalidad del Contenido El plagio en cualquier forma está expresamente prohibido, y el contenido de su artículo debe ser totalmente original. Sin embargo, hay situaciones en las que es apropiado incluir material citado en documentos técnicos. Si copia texto de otras fuentes, debe diferenciar claramente el texto copiado del texto original que realmente escribe. Las comillas son la mejor manera de identificar el material citado, pero también puede delinear dicho material utilizando una cara o sangría de tipo diferente. También debe citar claramente la fuente de donde se tomó el texto citado. M. Información de los Autores Los colaboradores del documento deben aparecer inmediatamente debajo del título del documento, como se ilustra en esta plantilla. Incluir una dirección de correo electrónico para cada autor no es obligatorio, pero es una conveniencia para los lectores del artículo. El nombre de un colaborador no se puede eliminar de un documento después de que se haya enviado sin el permiso por escrito de ese autor. RECONOCIMIENTO / AGRADECIMIENTO El siguiente es un ejemplo de un reconocimiento, permitiendo al autor mencionar quienes hicieron posible su éxito. ENTREGABLE: Es importante considerar las siguientes especificaciones para el archivo a entregar: a. Formato del archivo en .PDF b. Tamaño máximo del archivo 3 MB c. El archivo deberá cumplir con la siguiente nomenclatura: número de matrícula, seguido del Nombre del Proyecto (Corto y Específico), ejemplo: 151616 Sistema de telefonía IP.PDF
Puede agregar este documento a su colección de estudio (s)
Iniciar sesión Disponible sólo para usuarios autorizadosPuede agregar este documento a su lista guardada
Iniciar sesión Disponible sólo para usuarios autorizados(Para quejas, use otra forma )