SlideShare une entreprise Scribd logo
1  sur  6
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

Contenu connexe

Tendances (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
 

En vedette

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
 
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
 
Social Media für KMU
Social Media für KMUSocial Media für KMU
Social Media für KMUNicole 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
 
Handlungsorientiertes Lernen in Second Life
Handlungsorientiertes Lernen in Second LifeHandlungsorientiertes Lernen in Second Life
Handlungsorientiertes Lernen in Second LifeMatthias Rückel
 
HIER SIND YP-S3 BILDER!
HIER SIND YP-S3 BILDER!HIER SIND YP-S3 BILDER!
HIER SIND YP-S3 BILDER!marco678
 

En vedette (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!
 

Similaire à Grails: Framework para el desarrollo de aplicaciones Web No 5

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
 
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 Vistajuliocasal
 
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 BiargePlain 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 ServicesLuis 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
 
Administracion de seguridad
Administracion de seguridadAdministracion de seguridad
Administracion de seguridadVicente Alberca
 
Seguridad
SeguridadSeguridad
SeguridadVLASLOV
 
Acegi Security System for Spring
Acegi Security System for SpringAcegi Security System for Spring
Acegi Security System for SpringCarlos Sanchez
 

Similaire à 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
 

Plus 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
 

Dernier

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 

Dernier (11)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

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