Resumen:
Leer datos de una tabla encriptada.
Descripción:
Sin quererlo, los últimos artículos, se han convertido en una serie de encriptación:
El requerimiento era consultar los registros que se grabaron en la tabla encriptada. El programa debía ejecutarse en background (demon) y tomar acción según el estado.
Se hizo con Spring Boot y Spring Data. El mapeo de la entidad es muy
parecido a Grails. Para la transformación (desencriptar) de los campos,
se debe implementar un listener.
Como adicional, el uso de Spring Boot nos permite empaquetar las clases y librerías (al estilo de Fat-Jar); para tener una aplicación lista para el despliegue.
Bibliografía:
https://spring.io/guides/gs/accessing-data-mysql/
https://www.concretepage.com/java/jpa/jpa-entitylisteners-example-with-callbacks-prepersist-postpersist-postload-preupdate-postupdate-preremove-postremove
Configuración:
SpringBoot 1.5.8
Gradle 3.5
Java 1.8
miércoles, 27 de diciembre de 2017
martes, 28 de noviembre de 2017
Ejemplo 2017-11: Tabla encriptada.
Resumen:
Mantenimiento formulario con datos encriptados.
Descripción:
En el post anterior (https://codigo-programacion-17.blogspot.pe/2017/10/ejemplo-2017-10-logging-encriptado.html), utilicé el método AES para encriptar el texto del log. Entonces, la misma librería fue la que usé para grabar los datos encriptados de una tabla de registros.
Dado que teníamos una fecha límite (30 días) para tener el programa con las especificaciones requeridas, opté por usar Grails para construir el proyecto. En este ejemplo, quiero describir la forma de encriptar los datos. También aclarar, que otras formas de resolver esto era:
Antes de insert o actualizar (beforeInsert, beforeUpdate) se encripta las información. Y cuando se lee de la tabla (afterLoad) se desencripta.
Obviamente, este es un caso muy simple. Pero, si lo hubiera creando procedimiento de base de datos hubiera significado desencriptar en cada consulta. O, encriptar cada campo en cada transacción.
Finalmente, la ventaja que con GORM tenemos los métodos findBy* que son muy útiles.
Configuración:
Grails 3.3.1
Gradle 3.5
Java 1.8
Mantenimiento formulario con datos encriptados.
Descripción:
En el post anterior (https://codigo-programacion-17.blogspot.pe/2017/10/ejemplo-2017-10-logging-encriptado.html), utilicé el método AES para encriptar el texto del log. Entonces, la misma librería fue la que usé para grabar los datos encriptados de una tabla de registros.
Dado que teníamos una fecha límite (30 días) para tener el programa con las especificaciones requeridas, opté por usar Grails para construir el proyecto. En este ejemplo, quiero describir la forma de encriptar los datos. También aclarar, que otras formas de resolver esto era:
- Emplear los método de encriptación de MySql,
- Configurar Hibernate para que haga la conversión.
Antes de insert o actualizar (beforeInsert, beforeUpdate) se encripta las información. Y cuando se lee de la tabla (afterLoad) se desencripta.
Obviamente, este es un caso muy simple. Pero, si lo hubiera creando procedimiento de base de datos hubiera significado desencriptar en cada consulta. O, encriptar cada campo en cada transacción.
Finalmente, la ventaja que con GORM tenemos los métodos findBy* que son muy útiles.
Configuración:
Grails 3.3.1
Gradle 3.5
Java 1.8
lunes, 30 de octubre de 2017
Ejemplo 2017-10: Logging encriptado.
Resumen:
Generar (archivos) log encriptados.
Descripción:
Como parte del proyecto, se solicitó que las aplicaciones generen log de forma encriptada. Considerando que, luego deben ser descriptados para hacer el seguimiento, se programó una librería para encriptar textos y genere los archivos en formato CSV.
La implementación es sobre Logback. En el ejemplo, se puede apreciar lo cómodo que es trabajar con Groovy.
Necesitamos declarar el regla de conversión (CryptoConverter). También, para generar el encabezado se creó la clase LogFileHeaderPatternLayout. El resto, corresponde a código de la librería: RollingFileAppender, rollingPolicy(SizeAndTimeBasedRollingPolicy), etc.
Este es el resultado:
con,level,thread,msg
2017-10-30 14:43:06.123, INFO,[main],fqNSg3GrkKMcIePoF7kp+IQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.708, INFO,[main],rvYt6ocFGKwfP4NwqBjdvoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.711, INFO,[main],vpQjYtxnBzVozdz6gFi41YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.711, INFO,[main],9tC9J61SG0VnSggUsoTvNoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.712, INFO,[main],FNxzsBSmSRvE5jsreFpozoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.712, INFO,[main],frK6YUhunjkqKrdqVVJy1oQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.713, INFO,[main],IU2ziwUlZ0SNwMrOc3HYBoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.713, INFO,[main],H/jY5wKj7MowivuD9IhG9YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.713, INFO,[main],e/DVEVuDH1rhWuT2RkEFL4QiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.714, INFO,[main],BiHncd7iAAm3H2BN+IrHH10C3QWEtrturo3ec+v9j1s=
2017-10-30 14:45:17.643, INFO,[main],fqNSg3GrkKMcIePoF7kp+IQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.227, INFO,[main],rvYt6ocFGKwfP4NwqBjdvoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.228, INFO,[main],vpQjYtxnBzVozdz6gFi41YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.228, INFO,[main],9tC9J61SG0VnSggUsoTvNoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.229, INFO,[main],FNxzsBSmSRvE5jsreFpozoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.229, INFO,[main],frK6YUhunjkqKrdqVVJy1oQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.230, INFO,[main],IU2ziwUlZ0SNwMrOc3HYBoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.230, INFO,[main],H/jY5wKj7MowivuD9IhG9YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.231, INFO,[main],e/DVEVuDH1rhWuT2RkEFL4QiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.231, INFO,[main],BiHncd7iAAm3H2BN+IrHH10C3QWEtrturo3ec+v9j1s=
Código Fuente.-
https://github.com/edgargs/util-encrypt.git
Configuración:
Groovy 2.4.12
Gradle 3.5
Java 1.8
Generar (archivos) log encriptados.
Descripción:
Como parte del proyecto, se solicitó que las aplicaciones generen log de forma encriptada. Considerando que, luego deben ser descriptados para hacer el seguimiento, se programó una librería para encriptar textos y genere los archivos en formato CSV.
La implementación es sobre Logback. En el ejemplo, se puede apreciar lo cómodo que es trabajar con Groovy.
Necesitamos declarar el regla de conversión (CryptoConverter). También, para generar el encabezado se creó la clase LogFileHeaderPatternLayout. El resto, corresponde a código de la librería: RollingFileAppender, rollingPolicy(SizeAndTimeBasedRollingPolicy), etc.
Este es el resultado:
con,level,thread,msg
2017-10-30 14:43:06.123, INFO,[main],fqNSg3GrkKMcIePoF7kp+IQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.708, INFO,[main],rvYt6ocFGKwfP4NwqBjdvoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.711, INFO,[main],vpQjYtxnBzVozdz6gFi41YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.711, INFO,[main],9tC9J61SG0VnSggUsoTvNoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.712, INFO,[main],FNxzsBSmSRvE5jsreFpozoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.712, INFO,[main],frK6YUhunjkqKrdqVVJy1oQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.713, INFO,[main],IU2ziwUlZ0SNwMrOc3HYBoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.713, INFO,[main],H/jY5wKj7MowivuD9IhG9YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.713, INFO,[main],e/DVEVuDH1rhWuT2RkEFL4QiglN9YE2/DxeZD65QlMs=
2017-10-30 14:43:06.714, INFO,[main],BiHncd7iAAm3H2BN+IrHH10C3QWEtrturo3ec+v9j1s=
2017-10-30 14:45:17.643, INFO,[main],fqNSg3GrkKMcIePoF7kp+IQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.227, INFO,[main],rvYt6ocFGKwfP4NwqBjdvoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.228, INFO,[main],vpQjYtxnBzVozdz6gFi41YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.228, INFO,[main],9tC9J61SG0VnSggUsoTvNoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.229, INFO,[main],FNxzsBSmSRvE5jsreFpozoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.229, INFO,[main],frK6YUhunjkqKrdqVVJy1oQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.230, INFO,[main],IU2ziwUlZ0SNwMrOc3HYBoQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.230, INFO,[main],H/jY5wKj7MowivuD9IhG9YQiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.231, INFO,[main],e/DVEVuDH1rhWuT2RkEFL4QiglN9YE2/DxeZD65QlMs=
2017-10-30 14:45:18.231, INFO,[main],BiHncd7iAAm3H2BN+IrHH10C3QWEtrturo3ec+v9j1s=
Código Fuente.-
https://github.com/edgargs/util-encrypt.git
Configuración:
Groovy 2.4.12
Gradle 3.5
Java 1.8
jueves, 28 de septiembre de 2017
Ejemplo 2017-09: Envio de comandos masivo.
Resumen:
Envio de comandos SMS a dispositivos.
Descripción:
Este es otro ejemplo de lo bien que resulta emplear el scripting de Groovy, para automatizar las tareas.
Considerar que es necesario tener un servidor de envíos de SMS. Los dispositivos pudieran ser celulares; pero dado que son comandos de ejecución, en este caso corresponden a dispositivos de posicionamiento global (GPS).
La lista de los números y los comandos, se recuperar de un archivo .csv . Para consumir este tipo de archivos, se tiene una muy buena librería: groovycsv (https://github.com/xlson/groovycsv)
@Grab('com.xlson.groovycsv:groovycsv:1.1')
Puesto que el servidor de mensajería, expone una página web; empleamos un cliente http para enviar los comandos.
Todo en un solo archivo.
Código Fuente.-
https://github.com/edgargs/sendcommanddevice.git
Configuración:
Groovy 2.4.8
Java 1.8
Envio de comandos SMS a dispositivos.
Descripción:
Este es otro ejemplo de lo bien que resulta emplear el scripting de Groovy, para automatizar las tareas.
Considerar que es necesario tener un servidor de envíos de SMS. Los dispositivos pudieran ser celulares; pero dado que son comandos de ejecución, en este caso corresponden a dispositivos de posicionamiento global (GPS).
La lista de los números y los comandos, se recuperar de un archivo .csv . Para consumir este tipo de archivos, se tiene una muy buena librería: groovycsv (https://github.com/xlson/groovycsv)
@Grab('com.xlson.groovycsv:groovycsv:1.1')
Puesto que el servidor de mensajería, expone una página web; empleamos un cliente http para enviar los comandos.
Todo en un solo archivo.
Código Fuente.-
https://github.com/edgargs/sendcommanddevice.git
Configuración:
Groovy 2.4.8
Java 1.8
viernes, 25 de agosto de 2017
Encuesta reunión LimaGUG
A todos los interesados en conocer sobre Groovy, te invito a participar de esta encuesta para tener nuestra primera reunión como comunidad: Aquí
Ejemplo 2017-08: API fácil con Ratpack y Groovy.
Resumen:
Crear un API de forma rápida y sencilla con Ratpack y Groovy (DSL).
Descripción:
Ratpack es considerada una toolkit para crear aplicaciones HTTP. Ya había leído al respecto, pero no fue hasta hace poco que revisé algunos ejemplos. El claro uso que yo recomiendo: crear API-REST. Y es una alternativa a SpringBoot.
Este ejemplo, no es productivo. Quiero decir, nadie va a implementar este código para algún proyecto. Pero sí, nos dará un alcance de su facilidad.
Empleando DSL de Groovy; se específica las acciones (GET, POST, PUT, etc), el proceso a realizar y el resultado. También, notarán que podemos agruparlos con prefix.
Para ejecutarlo, basta con escribir:
groovy easy-api.groovy
Desde la línea de comandos, hice estas pruebas:
Ahora bien, se puede construir aplicaciones más complejas, implementando las clases Handler y Module. Enrutar a otros manejadores o consultar a una base de datos.
Ideal para microservicios.
Bibliografía:
https://ratpack.io/manual/current/quick-start.html
Configuración:
Ratpack 1.5.0-rc-2
Groovy 2.4.8
Java 1.8
Crear un API de forma rápida y sencilla con Ratpack y Groovy (DSL).
Descripción:
Ratpack es considerada una toolkit para crear aplicaciones HTTP. Ya había leído al respecto, pero no fue hasta hace poco que revisé algunos ejemplos. El claro uso que yo recomiendo: crear API-REST. Y es una alternativa a SpringBoot.
Este ejemplo, no es productivo. Quiero decir, nadie va a implementar este código para algún proyecto. Pero sí, nos dará un alcance de su facilidad.
Empleando DSL de Groovy; se específica las acciones (GET, POST, PUT, etc), el proceso a realizar y el resultado. También, notarán que podemos agruparlos con prefix.
Para ejecutarlo, basta con escribir:
groovy easy-api.groovy
Desde la línea de comandos, hice estas pruebas:
Ahora bien, se puede construir aplicaciones más complejas, implementando las clases Handler y Module. Enrutar a otros manejadores o consultar a una base de datos.
Ideal para microservicios.
Bibliografía:
https://ratpack.io/manual/current/quick-start.html
Configuración:
Ratpack 1.5.0-rc-2
Groovy 2.4.8
Java 1.8
martes, 18 de julio de 2017
Ejemplo 2017-07: Ultimo registro.
Resumen.-
Web muestra tiempo desde último registro.
Descripción.-
Con motivo de tener un contador que mostrara el tiempo transcurrido desde el último registro de incidencia de nuestros servicios, se construyó está simple página en Grails. La meta es acumular el mayor tiempo, como objetivo del área.
Como desubrí, no es necesario descargar todo el sdk. Pueden obtener una skeleton desde start.grails.org . Los cambios que hice son sencillos. Agregar una clase para recuperar la informacion de la base de datos. Para luego enviar este dato, a la vista que inicializará el cronómetro.
El resultado se ve así:
Notarán que el código backend (modificaciones) es muy poco. A parte de los cambios en configuraciones.
Se agregaron dos clases (groovy): controlador y dominio.
Y la página que contiene el javascript. En la cual se recibe el parámetro lastTime.
Como pueden ver, muy simple.
Código Fuente.-
https://github.com/edgargs/cerocaidas.git
Bibliografía.-
http://guides.grails.org/creating-your-first-grails-app/guide/index.html
https://codepen.io/Romlonix/pen/Fwsza
Configuración.-
Grails 3.3.0.RC1
Java 1.8
Web muestra tiempo desde último registro.
Descripción.-
Con motivo de tener un contador que mostrara el tiempo transcurrido desde el último registro de incidencia de nuestros servicios, se construyó está simple página en Grails. La meta es acumular el mayor tiempo, como objetivo del área.
Como desubrí, no es necesario descargar todo el sdk. Pueden obtener una skeleton desde start.grails.org . Los cambios que hice son sencillos. Agregar una clase para recuperar la informacion de la base de datos. Para luego enviar este dato, a la vista que inicializará el cronómetro.
El resultado se ve así:
Notarán que el código backend (modificaciones) es muy poco. A parte de los cambios en configuraciones.
Se agregaron dos clases (groovy): controlador y dominio.
Y la página que contiene el javascript. En la cual se recibe el parámetro lastTime.
Como pueden ver, muy simple.
Código Fuente.-
https://github.com/edgargs/cerocaidas.git
Bibliografía.-
http://guides.grails.org/creating-your-first-grails-app/guide/index.html
https://codepen.io/Romlonix/pen/Fwsza
Configuración.-
Grails 3.3.0.RC1
Java 1.8
Suscribirse a:
Entradas (Atom)




