SlideShare una empresa de Scribd logo
Grails: Framework
para el desarrollo de
aplicaciones Web (5ta Parte)
Grails es un framework orientado al desarrollo de aplicaciones web de forma sencilla,
rápida y divertida.


                                                métodos para producir diferentes tipos de
                                                hashes, entre los más usados se encuentran:
                                                   ✔   DigestUtils.md5(java.lang.String
                                                       data): Este método produce un
                                                       elemento de 16 bytes usando el
                                                       mecanismo MD5
                                                   ✔   DigestUtils..md5Hex(java.lang.Strin
Introducción                                           g data): Este método crea una
Dentro el proceso de desarrollo de                     cadena hexadecimal de 32 caracteres
aplicaciones web, la autenticación es uno de           usando el mecanismo MD5
los más importantes, ya que éste permitirá,        ✔   DigestUtils.shaHex(java.lang.String
realizar los controles de acceso por parte de          data): Este método crea una cadena
los usuarios a las distintas      partes del           hexadecimal de 32 caracteres pero
sistema.                                               usa el mecanismo SHA-1.


Autenticación                                   Control de acceso
por lo general este proceso consiste, en        Dentro de este proceso, se consideran los
desplegar un formulario donde el usuario        siguientes elementos:
deberá acceder su nombre de usuario y su
contraseña, estos datos son enviados al            ✔   Validación de la sesión
servidor y contrastados con alguna entrada         ✔   Usuarios
en una base de datos, para luego permitir o
                                                   ✔   Roles
denegar el acceso en caso de que
correspondan o no.                                 ✔   Permisos
                                                   ✔   Reglas
Hashing
Por lo general las contraseñas son sometidas    Captcha
a un hash antes de ser almacenadas como
una forma de precautelar la seguridad de las
mismas.
En Grails una técnica común para realizar       Son representaciones gráficas de una
esta tarea es usar DigestUtils en el paquete    cadena         alfanumérica       generada
org.apache.commons.codec.digest.Diges
                                                aleatoriamente, y que sirve para validar los
tUtils. Esta clase contiene una variedad de     datos introducidos dentro un formulario, así
mismo también previenen el spam en los            registro   dentro    el    UserController.
formularios.                                      Adicionalmente haremos uso de un
                                                  CAPTCHA , para lo cual debemos instalar el
                                                  plugin                    correspondiente
Proceso de autenticación                          (http://www.boomchucka.com/grails/gra
Para crear una solución de seguridad para         ils­Captcha­0.5.zip)
nuestras    aplicaciones    web,   debemos        grails install-plugin
considerar los siguientes aspectos dentro su      http://www.boomchucka.com/grails/grails-
                                                  Captcha-0.5.zip
diseño e implementación
        Registro de usuarios
    ✔
                                                  Proceso de Login
    ✔   Proceso de login
                                                  Para establecer un proceso de login dentro
    ✔   Registros de acceso y salida de           de nuestra aplicación, debemos realizar las
        usuarios                                  siguientes actividades:
    ✔   Asegurar los controles                          ✔   Crear el controlador de login
                                                        ✔   Crear el formulario de login
Registro de usuarios                                    ✔   Registrar la sesión del usuario
Para ésto debemos generar el formulario de
registro (registro.gsp) , una acción para el
Para crear el controlador de login, debemos ejecutar:


grails create-controller login


Dentro el archivo grails­app/controllers/LoginController.groovy debemos incluir el
siguiente código:


class LoginController {
    def index = { redirect(action:login,params:params) }

    def login = {}

    def manejaLogin = {
        def user = User.findByUsuarioAndPasword(params.usuario, params.pasword)
        if (!user) {
            flash.message = "Usuario no encontrado: ${params.usuario}"
            redirect(action:'login')
            return
          }
        else
        {
          session.user = user
          redirect(controller:'evento')
        }
    }

    def logout = {
       if(session.user) {
           session.user = null
           redirect(action:'login')
       }
    }
}
Este código básicamente permite manejar las acciones de login y logout, registrando o
anulando el registro de la sesión del usuario respectivamente.
Para que este controlador pueda funcionar correctamente precisamos crear una vista con el
siguiente contenido:




<html>
    <head>
       <title>Login Page</title>
       <meta name="layout" content="main" />
    </head>
    <body>
       <div class="body">
            <g:if test="${flash.message}">
                 <div class="message">
                  ${flash.message}
               </div>
         </g:if>
           <p>
               Bienvenido a Gestión de eventos
           </p>
           <form action="manejaLogin">
                <span class='nameClear'><label for="usuario">Usuario:</label>
                </span>
<td valign="top" class="value $
{hasErrors(bean:userInstance,field:'usuario','errors')}">
               <input type="text" id="usuario" name="usuario" value="$
{fieldValue(bean:userInstance,field:'usuario')}"/>
               </td>
               <span class='nameClear'><label for="pasword">Password:</label>
               <td valign="top" class="value $
{hasErrors(bean:userInstance,field:'pasword','errors')}">
               <input type="password" id="pasword" name="pasword" value="$
{fieldValue(bean:userInstance,field:'pasword')}"/>
               </td>
               <div class="buttons">
                <span class="button"><input class="save" type="submit" value="Login"
/></span>
                 </div>
               </div>
           </form>
      </div>
   </body>
</html>


El resultado de esta vista la podemos observar en el siguiente gráfico:




Una vez que el usuario haya introducido los datos correctos de usuario y contraseña, estos
deben ser registrados en la sesión, adicionalmente podemos desplegar los datos del usuario en
la sección TopBar de la pantalla y claro está desplegar la opción de logout; para esto debemos
realizar algunas modificaciones en la vista del TopBar, cuyo contendido deberá ser el siguiente:
grails­app/views/common/_topbar.gsp
<div id="menu">
    <nobr>
       <g:if test="${session.user}">
         <b>${session.user?.nombre}&nbsp;${session.user?.apellido}</b> |
          <g:link controller="login" action="logout">Logout</g:link>
       </g:if>
     <g:else>
        <g:link controller="login" action="login">Login</g:link>
     </g:else>
  </nobr>
</div>
El resultado del proceso de login se muestra en el siguiente gráfico:




Asegurar los controles
Una práctica común dentro del desarrollo de aplicaciones web, es asegurar los controles de
acceso, referidos principalmente a controlar mediante un proceso de login (autenticación de
usuarios) el acceso a distintas partes de la aplicación. Para esto Grails posee distintos
mecanismos, algunos de ellos basados en plugins y otros basados en el uso de filtros.
Para nuestro caso haremos uso de filtros, que es el mecanismo más sencillo y rápido de
implementar. Para esto debemos crear una clase filters, cuyo contenido es el siguiente:


grails­app/conf/SecurityFilters.groovy
class SecurityFilters {
  def filters = {
      GestionEventosFilter(controller:'*', action:'*') {
           before = {
                if(!session.user
                     && !controllerName.equals('login')
                     && !controllerName.equals('captcha')
                     && ( !controllerName.equals('user')
                     && !actionName.equals("registro"))
                     ) {
                     redirect(controller:'login')
                     return false
                      }
                   }
           }
  }
}
El anterior código hará que los usuarios para acceder a cualquier parte de la aplicación
necesariamente tengan que autenticarse, dicho de otra forma si el usuario trata de acceder a
una URL de un módulo en específico de la aplicación, será redireccionado al módulo de login.


Referencias
[1]    http://www.grails.org
[2]    Getting Started with Grails
[3]    The Definitive Guide to Grails


Autor




Esteban Saavedra López
Líder de la Comunidad ATIX (Oruro – Bolivia)
Activista de Software Libre en Bolivia
jesaavedra@opentelematics.org
http://jesaavedra.opentelematics.org

Más contenido relacionado

La actualidad más candente

09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)UTN
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
Freelancer
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
jose luis barrientos
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
Jose Luis Carrasco Comonfort
 
Semana 5 Angular Rutas y Controladores
Semana 5   Angular Rutas y ControladoresSemana 5   Angular Rutas y Controladores
Semana 5 Angular Rutas y Controladores
Richard Eliseo Mendoza Gafaro
 
Desarrollo De Web Parts En Share Point2007
Desarrollo De Web Parts En Share Point2007Desarrollo De Web Parts En Share Point2007
Desarrollo De Web Parts En Share Point2007
Luis Du Solier
 
Taller integracion jsf spring
Taller integracion jsf springTaller integracion jsf spring
Taller integracion jsf spring
IBM
 
Magento Best Practices
Magento Best PracticesMagento Best Practices
Magento Best Practices
On4U Global Services
 
Curso JSF - Conceptos Basicos
Curso JSF - Conceptos BasicosCurso JSF - Conceptos Basicos
Curso JSF - Conceptos Basicos
Jose Luis Bugarin Peche
 
Semana 4 Estructura y componentes SPA
Semana 4  Estructura y componentes SPASemana 4  Estructura y componentes SPA
Semana 4 Estructura y componentes SPA
Richard Eliseo Mendoza Gafaro
 
Org tutorial struts_2010
Org tutorial struts_2010Org tutorial struts_2010
Org tutorial struts_2010
Omar Rios
 
JBossAS: Desarrollo con Java Server Faces
JBossAS: Desarrollo con Java Server FacesJBossAS: Desarrollo con Java Server Faces
JBossAS: Desarrollo con Java Server Faces
Aitor Acedo
 
Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 ejercicios asp.net
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
Eudris Cabrera
 
Ejercicio basico jsf’s
Ejercicio basico jsf’sEjercicio basico jsf’s
Ejercicio basico jsf’s
ayreonmx
 

La actualidad más candente (20)

09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)
 
06. jsf (java server faces) (1)
06. jsf (java server faces) (1)06. jsf (java server faces) (1)
06. jsf (java server faces) (1)
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 
Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3Aplicación abc. asp net mvc 3
Aplicación abc. asp net mvc 3
 
10.desarrollowebconjava
10.desarrollowebconjava10.desarrollowebconjava
10.desarrollowebconjava
 
Semana 5 Angular Rutas y Controladores
Semana 5   Angular Rutas y ControladoresSemana 5   Angular Rutas y Controladores
Semana 5 Angular Rutas y Controladores
 
Java server faces
Java server facesJava server faces
Java server faces
 
Angularjs
AngularjsAngularjs
Angularjs
 
Desarrollo De Web Parts En Share Point2007
Desarrollo De Web Parts En Share Point2007Desarrollo De Web Parts En Share Point2007
Desarrollo De Web Parts En Share Point2007
 
Taller integracion jsf spring
Taller integracion jsf springTaller integracion jsf spring
Taller integracion jsf spring
 
Magento Best Practices
Magento Best PracticesMagento Best Practices
Magento Best Practices
 
Curso JSF - Conceptos Basicos
Curso JSF - Conceptos BasicosCurso JSF - Conceptos Basicos
Curso JSF - Conceptos Basicos
 
JqueryMobile
JqueryMobile JqueryMobile
JqueryMobile
 
Semana 4 Estructura y componentes SPA
Semana 4  Estructura y componentes SPASemana 4  Estructura y componentes SPA
Semana 4 Estructura y componentes SPA
 
Org tutorial struts_2010
Org tutorial struts_2010Org tutorial struts_2010
Org tutorial struts_2010
 
JBossAS: Desarrollo con Java Server Faces
JBossAS: Desarrollo con Java Server FacesJBossAS: Desarrollo con Java Server Faces
JBossAS: Desarrollo con Java Server Faces
 
Dce2 ejercicios asp.net
Dce2 ejercicios asp.netDce2 ejercicios asp.net
Dce2 ejercicios asp.net
 
[ES] Conectividad de java a base de datos(jdbc)
[ES] Conectividad de java a base  de datos(jdbc)[ES] Conectividad de java a base  de datos(jdbc)
[ES] Conectividad de java a base de datos(jdbc)
 
Ejercicio basico jsf’s
Ejercicio basico jsf’sEjercicio basico jsf’s
Ejercicio basico jsf’s
 
Tutorial ASP .NET
Tutorial ASP .NETTutorial ASP .NET
Tutorial ASP .NET
 

Destacado

Debería obtener una certificación en dirección de proyectos
Debería obtener una certificación en dirección de proyectosDebería obtener una certificación en dirección de proyectos
Debería obtener una certificación en dirección de proyectos
Lorenzo Armenta Fonseca CAPM, MCP, MCTS
 
Terminvereinbarungen
TerminvereinbarungenTerminvereinbarungen
Terminvereinbarungenelisaweb20
 
La terra en l'univers
La terra en l'universLa terra en l'univers
La terra en l'universsansol
 
Energies renovables pptsencer
Energies renovables pptsencerEnergies renovables pptsencer
Energies renovables pptsencerMartí Casares
 
Ecumenismo y Dialogo
Ecumenismo y DialogoEcumenismo y Dialogo
Ecumenismo y Dialogousapuka
 
Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02
Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02
Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02pmichellecarol
 
Comprimido en 110 años
Comprimido en 110 añosComprimido en 110 años
Comprimido en 110 años
Darío R. Rocha Jiménez
 
Sokieba - Wer´s spielt, hat Glück.
Sokieba - Wer´s spielt, hat Glück.Sokieba - Wer´s spielt, hat Glück.
Sokieba - Wer´s spielt, hat Glück.
essjotess
 
Curso de Marketing Digital
Curso de Marketing DigitalCurso de Marketing Digital
Curso de Marketing Digital
Lorenzo Armenta Fonseca CAPM, MCP, MCTS
 
Escalas De La Vida 2
Escalas De La Vida 2Escalas De La Vida 2
Escalas De La Vida 2
Adriana Delgadillo
 
Social Media für KMU
Social Media für KMUSocial Media für KMU
Social Media für KMU
Nicole Simon
 
Mejora de-procesos-y-productividad-1204582597207309-4
Mejora de-procesos-y-productividad-1204582597207309-4Mejora de-procesos-y-productividad-1204582597207309-4
Mejora de-procesos-y-productividad-1204582597207309-4Luis Bourget
 
Coterminal 2
Coterminal 2Coterminal 2
Fce.Uba Project Management
Fce.Uba Project ManagementFce.Uba Project Management
Fce.Uba Project Management
Sebastian San Juan
 
Handlungsorientiertes Lernen in Second Life
Handlungsorientiertes Lernen in Second LifeHandlungsorientiertes Lernen in Second Life
Handlungsorientiertes Lernen in Second Life
Matthias Rückel
 
HIER SIND YP-S3 BILDER!
HIER SIND YP-S3 BILDER!HIER SIND YP-S3 BILDER!
HIER SIND YP-S3 BILDER!
marco678
 

Destacado (20)

Debería obtener una certificación en dirección de proyectos
Debería obtener una certificación en dirección de proyectosDebería obtener una certificación en dirección de proyectos
Debería obtener una certificación en dirección de proyectos
 
Terminvereinbarungen
TerminvereinbarungenTerminvereinbarungen
Terminvereinbarungen
 
La terra en l'univers
La terra en l'universLa terra en l'univers
La terra en l'univers
 
Energies renovables pptsencer
Energies renovables pptsencerEnergies renovables pptsencer
Energies renovables pptsencer
 
Integration camel
Integration camelIntegration camel
Integration camel
 
Ecumenismo y Dialogo
Ecumenismo y DialogoEcumenismo y Dialogo
Ecumenismo y Dialogo
 
Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02
Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02
Fisiopatolnew0408205bmodo20de20compatibilidad5d 091024132247-phpapp02
 
Comprimido en 110 años
Comprimido en 110 añosComprimido en 110 años
Comprimido en 110 años
 
Sokieba - Wer´s spielt, hat Glück.
Sokieba - Wer´s spielt, hat Glück.Sokieba - Wer´s spielt, hat Glück.
Sokieba - Wer´s spielt, hat Glück.
 
Curso de Marketing Digital
Curso de Marketing DigitalCurso de Marketing Digital
Curso de Marketing Digital
 
Escalas De La Vida 2
Escalas De La Vida 2Escalas De La Vida 2
Escalas De La Vida 2
 
Social Media für KMU
Social Media für KMUSocial Media für KMU
Social Media für KMU
 
Mejora de-procesos-y-productividad-1204582597207309-4
Mejora de-procesos-y-productividad-1204582597207309-4Mejora de-procesos-y-productividad-1204582597207309-4
Mejora de-procesos-y-productividad-1204582597207309-4
 
A1 familie1
A1 familie1A1 familie1
A1 familie1
 
Coterminal 2
Coterminal 2Coterminal 2
Coterminal 2
 
GijóN 2008
GijóN 2008GijóN 2008
GijóN 2008
 
Fce.Uba Project Management
Fce.Uba Project ManagementFce.Uba Project Management
Fce.Uba Project Management
 
Cantare(Cai)
Cantare(Cai)Cantare(Cai)
Cantare(Cai)
 
Handlungsorientiertes Lernen in Second Life
Handlungsorientiertes Lernen in Second LifeHandlungsorientiertes Lernen in Second Life
Handlungsorientiertes Lernen in Second Life
 
HIER SIND YP-S3 BILDER!
HIER SIND YP-S3 BILDER!HIER SIND YP-S3 BILDER!
HIER SIND YP-S3 BILDER!
 

Similar a Grails: Framework para el desarrollo de aplicaciones Web No 5

T10_Ejercicios_Solucion.pdf
T10_Ejercicios_Solucion.pdfT10_Ejercicios_Solucion.pdf
T10_Ejercicios_Solucion.pdf
Jorge Luis Chumpitaz Velez
 
0150 como desarrollar_aplicaciones_seguras_con_gene_xus
0150 como desarrollar_aplicaciones_seguras_con_gene_xus0150 como desarrollar_aplicaciones_seguras_con_gene_xus
0150 como desarrollar_aplicaciones_seguras_con_gene_xusGeneXus
 
Web 2.0 ajax con SharePoint
Web 2.0 ajax con SharePointWeb 2.0 ajax con SharePoint
Web 2.0 ajax con SharePointgoreorti
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
MarlonAlbertoGalvis
 
Implementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datosImplementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datosHelmilpa
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
www.encamina.com
 
Reglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows VistaReglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows Vista
juliocasal
 
Security in MVC Core by Hugo Biarge
Security in MVC Core by Hugo BiargeSecurity in MVC Core by Hugo Biarge
Security in MVC Core by Hugo Biarge
Plain Concepts
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAlberto Ruibal
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
INSIGNIA4U
 
Taller de Azure Cognitive Services
Taller de Azure Cognitive ServicesTaller de Azure Cognitive Services
Taller de Azure Cognitive Services
Luis Beltran
 
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup
 
MODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHPMODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHP
Gabriel Atilio Carrillo Seijas
 
Administracion de seguridad
Administracion de seguridadAdministracion de seguridad
Administracion de seguridad
Vicente Alberca
 
Seguridad
SeguridadSeguridad
Seguridad
VLASLOV
 
Acegi Security System for Spring
Acegi Security System for SpringAcegi Security System for Spring
Acegi Security System for Spring
Carlos Sanchez
 
Mi app-asp-net-mvc2
Mi app-asp-net-mvc2Mi app-asp-net-mvc2
Mi app-asp-net-mvc2
Enrique Valdez
 
Esquemas de seguridad para el servidor
Esquemas de seguridad para el servidorEsquemas de seguridad para el servidor
Esquemas de seguridad para el servidor
Alberto Arredondo Infante
 

Similar a Grails: Framework para el desarrollo de aplicaciones Web No 5 (20)

T10_Ejercicios_Solucion.pdf
T10_Ejercicios_Solucion.pdfT10_Ejercicios_Solucion.pdf
T10_Ejercicios_Solucion.pdf
 
0150 como desarrollar_aplicaciones_seguras_con_gene_xus
0150 como desarrollar_aplicaciones_seguras_con_gene_xus0150 como desarrollar_aplicaciones_seguras_con_gene_xus
0150 como desarrollar_aplicaciones_seguras_con_gene_xus
 
Web 2.0 ajax con SharePoint
Web 2.0 ajax con SharePointWeb 2.0 ajax con SharePoint
Web 2.0 ajax con SharePoint
 
Tema 7
Tema 7Tema 7
Tema 7
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Implementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datosImplementar la seguridad en el acceso a datos
Implementar la seguridad en el acceso a datos
 
"Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore""Los Imprescindibles de .NetCore"
"Los Imprescindibles de .NetCore"
 
Reglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows VistaReglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows Vista
 
Security in MVC Core by Hugo Biarge
Security in MVC Core by Hugo BiargeSecurity in MVC Core by Hugo Biarge
Security in MVC Core by Hugo Biarge
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en Android
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Taller de Azure Cognitive Services
Taller de Azure Cognitive ServicesTaller de Azure Cognitive Services
Taller de Azure Cognitive Services
 
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
 
MODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHPMODELO VISTA CONTROLADOR EN PHP
MODELO VISTA CONTROLADOR EN PHP
 
Administracion de seguridad
Administracion de seguridadAdministracion de seguridad
Administracion de seguridad
 
Seguridad
SeguridadSeguridad
Seguridad
 
Acegi Security System for Spring
Acegi Security System for SpringAcegi Security System for Spring
Acegi Security System for Spring
 
Mi app-asp-net-mvc2
Mi app-asp-net-mvc2Mi app-asp-net-mvc2
Mi app-asp-net-mvc2
 
Esquemas de seguridad para el servidor
Esquemas de seguridad para el servidorEsquemas de seguridad para el servidor
Esquemas de seguridad para el servidor
 

Más de Esteban Saavedra

Atix30
Atix30Atix30
Atix29
Atix29Atix29
Atix28
Atix28Atix28
Atix27
Atix27Atix27
Atix26
Atix26Atix26
Atix25
Atix25Atix25
Rabbitmq
RabbitmqRabbitmq
Ansible
AnsibleAnsible
Perl
PerlPerl
Atix23
Atix23Atix23
Lineas Base Migracion a Software Libre
Lineas Base Migracion a Software LibreLineas Base Migracion a Software Libre
Lineas Base Migracion a Software Libre
Esteban Saavedra
 
Seguridad Sistemas de Gobierno
Seguridad Sistemas de GobiernoSeguridad Sistemas de Gobierno
Seguridad Sistemas de Gobierno
Esteban Saavedra
 
Tunneling: Esquivando Restricciones de Proxies y Firewalls
Tunneling: Esquivando Restricciones de Proxies y FirewallsTunneling: Esquivando Restricciones de Proxies y Firewalls
Tunneling: Esquivando Restricciones de Proxies y Firewalls
Esteban Saavedra
 
Bi Un Modelo Eficiente para Gerenciar Empresas
Bi Un Modelo Eficiente para Gerenciar EmpresasBi Un Modelo Eficiente para Gerenciar Empresas
Bi Un Modelo Eficiente para Gerenciar Empresas
Esteban Saavedra
 
Clouds privadas
Clouds privadasClouds privadas
Clouds privadas
Esteban Saavedra
 
Introduccion Computacion Ubicua
Introduccion Computacion UbicuaIntroduccion Computacion Ubicua
Introduccion Computacion Ubicua
Esteban Saavedra
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web Grails
Esteban Saavedra
 
Avances Tecnologicos
Avances TecnologicosAvances Tecnologicos
Avances Tecnologicos
Esteban Saavedra
 
Dni Electronico Bolivia
Dni Electronico BoliviaDni Electronico Bolivia
Dni Electronico Bolivia
Esteban Saavedra
 

Más de Esteban Saavedra (20)

Atix30
Atix30Atix30
Atix30
 
Atix29
Atix29Atix29
Atix29
 
Atix28
Atix28Atix28
Atix28
 
Atix27
Atix27Atix27
Atix27
 
Atix26
Atix26Atix26
Atix26
 
Atix25
Atix25Atix25
Atix25
 
Rabbitmq
RabbitmqRabbitmq
Rabbitmq
 
Ansible
AnsibleAnsible
Ansible
 
Perl
PerlPerl
Perl
 
Atix24
Atix24Atix24
Atix24
 
Atix23
Atix23Atix23
Atix23
 
Lineas Base Migracion a Software Libre
Lineas Base Migracion a Software LibreLineas Base Migracion a Software Libre
Lineas Base Migracion a Software Libre
 
Seguridad Sistemas de Gobierno
Seguridad Sistemas de GobiernoSeguridad Sistemas de Gobierno
Seguridad Sistemas de Gobierno
 
Tunneling: Esquivando Restricciones de Proxies y Firewalls
Tunneling: Esquivando Restricciones de Proxies y FirewallsTunneling: Esquivando Restricciones de Proxies y Firewalls
Tunneling: Esquivando Restricciones de Proxies y Firewalls
 
Bi Un Modelo Eficiente para Gerenciar Empresas
Bi Un Modelo Eficiente para Gerenciar EmpresasBi Un Modelo Eficiente para Gerenciar Empresas
Bi Un Modelo Eficiente para Gerenciar Empresas
 
Clouds privadas
Clouds privadasClouds privadas
Clouds privadas
 
Introduccion Computacion Ubicua
Introduccion Computacion UbicuaIntroduccion Computacion Ubicua
Introduccion Computacion Ubicua
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web Grails
 
Avances Tecnologicos
Avances TecnologicosAvances Tecnologicos
Avances Tecnologicos
 
Dni Electronico Bolivia
Dni Electronico BoliviaDni Electronico Bolivia
Dni Electronico Bolivia
 

Último

DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Telefónica
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
jjfch3110
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
cj3806354
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
JuanPrez962115
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 

Último (20)

DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
Índice del libro "Big Data: Tecnologías para arquitecturas Data-Centric" de 0...
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdfTrabajo Coding For kids 1 y 2 grado 9-4.pdf
Trabajo Coding For kids 1 y 2 grado 9-4.pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Alan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentaciónAlan Turing Vida o biografía resumida como presentación
Alan Turing Vida o biografía resumida como presentación
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 

Grails: Framework para el desarrollo de aplicaciones Web No 5

  • 1. Grails: Framework para el desarrollo de aplicaciones Web (5ta Parte) Grails es un framework orientado al desarrollo de aplicaciones web de forma sencilla, rápida y divertida. métodos para producir diferentes tipos de hashes, entre los más usados se encuentran: ✔ DigestUtils.md5(java.lang.String data): Este método produce un elemento de 16 bytes usando el mecanismo MD5 ✔ DigestUtils..md5Hex(java.lang.Strin Introducción g data): Este método crea una Dentro el proceso de desarrollo de cadena hexadecimal de 32 caracteres aplicaciones web, la autenticación es uno de usando el mecanismo MD5 los más importantes, ya que éste permitirá, ✔ DigestUtils.shaHex(java.lang.String realizar los controles de acceso por parte de data): Este método crea una cadena los usuarios a las distintas partes del hexadecimal de 32 caracteres pero sistema. usa el mecanismo SHA-1. Autenticación Control de acceso por lo general este proceso consiste, en Dentro de este proceso, se consideran los desplegar un formulario donde el usuario siguientes elementos: deberá acceder su nombre de usuario y su contraseña, estos datos son enviados al ✔ Validación de la sesión servidor y contrastados con alguna entrada ✔ Usuarios en una base de datos, para luego permitir o ✔ Roles denegar el acceso en caso de que correspondan o no. ✔ Permisos ✔ Reglas Hashing Por lo general las contraseñas son sometidas Captcha a un hash antes de ser almacenadas como una forma de precautelar la seguridad de las mismas. En Grails una técnica común para realizar Son representaciones gráficas de una esta tarea es usar DigestUtils en el paquete cadena alfanumérica generada org.apache.commons.codec.digest.Diges aleatoriamente, y que sirve para validar los tUtils. Esta clase contiene una variedad de datos introducidos dentro un formulario, así
  • 2. mismo también previenen el spam en los registro dentro el UserController. formularios. Adicionalmente haremos uso de un CAPTCHA , para lo cual debemos instalar el plugin correspondiente Proceso de autenticación (http://www.boomchucka.com/grails/gra Para crear una solución de seguridad para ils­Captcha­0.5.zip) nuestras aplicaciones web, debemos grails install-plugin considerar los siguientes aspectos dentro su http://www.boomchucka.com/grails/grails- Captcha-0.5.zip diseño e implementación Registro de usuarios ✔ Proceso de Login ✔ Proceso de login Para establecer un proceso de login dentro ✔ Registros de acceso y salida de de nuestra aplicación, debemos realizar las usuarios siguientes actividades: ✔ Asegurar los controles ✔ Crear el controlador de login ✔ Crear el formulario de login Registro de usuarios ✔ Registrar la sesión del usuario Para ésto debemos generar el formulario de registro (registro.gsp) , una acción para el Para crear el controlador de login, debemos ejecutar: grails create-controller login Dentro el archivo grails­app/controllers/LoginController.groovy debemos incluir el siguiente código: class LoginController { def index = { redirect(action:login,params:params) } def login = {} def manejaLogin = { def user = User.findByUsuarioAndPasword(params.usuario, params.pasword) if (!user) { flash.message = "Usuario no encontrado: ${params.usuario}" redirect(action:'login') return } else { session.user = user redirect(controller:'evento') } } def logout = { if(session.user) { session.user = null redirect(action:'login') } } }
  • 3. Este código básicamente permite manejar las acciones de login y logout, registrando o anulando el registro de la sesión del usuario respectivamente. Para que este controlador pueda funcionar correctamente precisamos crear una vista con el siguiente contenido: <html> <head> <title>Login Page</title> <meta name="layout" content="main" /> </head> <body> <div class="body"> <g:if test="${flash.message}"> <div class="message"> ${flash.message} </div> </g:if> <p> Bienvenido a Gestión de eventos </p> <form action="manejaLogin"> <span class='nameClear'><label for="usuario">Usuario:</label> </span>
  • 4. <td valign="top" class="value $ {hasErrors(bean:userInstance,field:'usuario','errors')}"> <input type="text" id="usuario" name="usuario" value="$ {fieldValue(bean:userInstance,field:'usuario')}"/> </td> <span class='nameClear'><label for="pasword">Password:</label> <td valign="top" class="value $ {hasErrors(bean:userInstance,field:'pasword','errors')}"> <input type="password" id="pasword" name="pasword" value="$ {fieldValue(bean:userInstance,field:'pasword')}"/> </td> <div class="buttons"> <span class="button"><input class="save" type="submit" value="Login" /></span> </div> </div> </form> </div> </body> </html> El resultado de esta vista la podemos observar en el siguiente gráfico: Una vez que el usuario haya introducido los datos correctos de usuario y contraseña, estos deben ser registrados en la sesión, adicionalmente podemos desplegar los datos del usuario en la sección TopBar de la pantalla y claro está desplegar la opción de logout; para esto debemos realizar algunas modificaciones en la vista del TopBar, cuyo contendido deberá ser el siguiente: grails­app/views/common/_topbar.gsp <div id="menu"> <nobr> <g:if test="${session.user}"> <b>${session.user?.nombre}&nbsp;${session.user?.apellido}</b> | <g:link controller="login" action="logout">Logout</g:link> </g:if> <g:else> <g:link controller="login" action="login">Login</g:link> </g:else> </nobr> </div>
  • 5. El resultado del proceso de login se muestra en el siguiente gráfico: Asegurar los controles Una práctica común dentro del desarrollo de aplicaciones web, es asegurar los controles de acceso, referidos principalmente a controlar mediante un proceso de login (autenticación de usuarios) el acceso a distintas partes de la aplicación. Para esto Grails posee distintos mecanismos, algunos de ellos basados en plugins y otros basados en el uso de filtros. Para nuestro caso haremos uso de filtros, que es el mecanismo más sencillo y rápido de implementar. Para esto debemos crear una clase filters, cuyo contenido es el siguiente: grails­app/conf/SecurityFilters.groovy class SecurityFilters { def filters = { GestionEventosFilter(controller:'*', action:'*') { before = { if(!session.user && !controllerName.equals('login') && !controllerName.equals('captcha') && ( !controllerName.equals('user') && !actionName.equals("registro")) ) { redirect(controller:'login') return false } } } } }
  • 6. El anterior código hará que los usuarios para acceder a cualquier parte de la aplicación necesariamente tengan que autenticarse, dicho de otra forma si el usuario trata de acceder a una URL de un módulo en específico de la aplicación, será redireccionado al módulo de login. Referencias [1] http://www.grails.org [2] Getting Started with Grails [3] The Definitive Guide to Grails Autor Esteban Saavedra López Líder de la Comunidad ATIX (Oruro – Bolivia) Activista de Software Libre en Bolivia jesaavedra@opentelematics.org http://jesaavedra.opentelematics.org