Continuando con la presentación de seguridad en aplicaciones web, aplicado especialmente a Java EE voy a presentar un proyecto que he llevado a cabo este año, un proyecto que se podría acercar bastante a un ejemplo real con Java EE. Una tienda Online.

El proyecto comenzó siendo una asignatura de la universidad, pero conforme fue avanzando me fui involucrando más en ello y fue adquiriendo unas dimensiones que fácilmente acercarían a la aplicación a algo cada vez más orientado a algo real.

Al acabar el curso el profesor de la asignatura, Abraham Otero Quintana me propuso perfeccionar el proyecto con la intención de que fuera útil a mucha más gente, que fuera un ejemplo más avanzado de lo que se suele encontrar en los manuales.

La Aplicación

El proyecto consiste en una aplicación web Java EE que cumple con las funciones de una tienda online. Consiste en una web en la que los usuarios pueden adquirir una serie de productos y posteriormente realizarán el pago (no se ha implementado ninguna pasarela de pago). Los usuarios de la tienda podrán ser usuarios sin registrar o se podrán registrar en la aplicación, lo que les evitará tener que rellenar sus datos; a la vez que les permitirá dejar comentarios sobre los productos.

Como cualquier aplicación del estilo que se precie dispone de una zona de administración únicamente accesible a usuarios con derechos de administración. En dicha zona se podrá gestionar los productos en venta, los usuarios de la aplicación registrados y también consultar el historial de ventas, con el que se generan una serie de gráficas estadísticas sobre las ventas; por último será posible gestionar los comentarios de los productos. Las características están más detalladas en la documentación.

 

En detalle

La aplicación basa su persistencia en el patrón DAO, por lo que es posible implementar varios métodos de persistencia. Por defecto se han implementado la persistencia contra bases de datos (MySQL) y persistencia contra ficheros serializados en disco.

Durante el desarrollo de la aplicación se ha prestado especial atención a varios aspectos: la seguridad, la concurrencia y finalmente un especial cuidado en la detección de fallos y errores en el funcionamiento del sistema.

En el aspecto de la seguridad nos encontraremos con que toda información enviada por el usuario es validada mediante una librería de seguridad (ESAPI), observaremos también que todo el sistema de URLs está preparado para que solo sea posible acceder a las páginas de la manera que se espera y no de otra manera. Encontraremos más información sobre las medidas tomadas en la documentación del proyecto.

En lo referente a la concurrencia se han hecho las clases encargadas de la persistencia siguiendo el patrón de diseño Singleton para que no sea posible tener más de una instancia de esa clase. En el caso de la persistencia contra ficheros se han tomado las medidas necesarias para asegurar que los archivos no sean corrompidos realizando escrituras simultáneas; así como en el caso de la persistencia contra bases de datos se ha usado un nivel de aislamiento adecuado para evitar la lectura de datos confirmados (READ COMMITED). Es de especial interés en lo que a concurrencia se refiere la manera en la que se hace la compra de un carrito y se disminuyen las unidades en el almacén.

 

Recursos

He decidido publicar el código fuente completo en un repositorio de google code GitHub, también dejo las sentencias SQL necesarias para crear la base de datos. He realizado también un escrito como documentación en el que se puede observar el funcionamiento más en detalle de la aplicación. Por último he realizado un videotutorial en el que se explica desde cero como montar la aplicación y todo lo necesario para que esta funcione.

 

Descarga del Proyecto desde GitHub

El proyecto inicialmente se dejó disponible en un repositorio de Google Code. Google ha decidido cerrar Google Code y se ha migrado el proyecto a un repositorio de GitHub. Aunque el tutorial en vídeo que se ha publicado esté hecho para Google Code se puede usar igualmente para obtener el proyecto desde GitHub.

La principal diferencia es que la URL del repositorio es distinta y que el proyecto ya no está dentro de una subcarpeta trunk sino que está en la raíz del repositorio. A continuación se indica la nueva URL del repositorio del proyecto.

https://github.com/JuanDYB/tiendaonlinelpijdyb

Directorio de Checkout: /OnlineShop

 

Espero que os haya gustado y os haya ayudado este ejemplo de programación con Java EE. La publicación es totalmente desinteresada y con fines didácticos; si alguien estuviese interesado en utilizarlo para algún otro fin o seguir trabajando en ello me gustaría que me lo comunicase y se podrían publicar las mejoras.

Estoy abierto a cualquier duda al respecto ya sea con un comentario, contactando conmigo mediante el formulario de contacto o mediante los medios que se indican en la documentación o en Twitter.

Actualización: El artículo ha sido publicado en JavaHispano por Abraham Otero. Creo que es interesante ver los comentarios que se han publicado allí, entre otras cosas por anotaciones interesantes que se han hecho y que se hagan.

Actualización (28-marzo-2013): He publicado una actualización del código que modifica bastantes cosas y también he actualizado la documentación con ello, y es la versión 2 de la documentación.

Actualización (28-marzo-2013): Instrucciones para usar Tomcat y persistencia con Postgres. La configuración de la base de datos para Postgres la he añadido en la sección de los recursos.

Actualización (14-marzo-2015): Se actualiza este artículo debido a que Google ha decidido cerrar Google Code y el proyecto se ha migrado a un repositorio de GitHub.

Centro de preferencias de privacidad

Cookies imprescindibles

No se captura IPs ni siquiera para el servicio de Analytics así que tu visita es privada.

gdpr

Advertising

Analytics

Cookies de terceros

Usamos cookies de terceros con servicios, también garantes de tu privacidad, que analizan tus usos de navegación para que podamos mejorar los contenidos, si ya estás suscrito al boletín y los elementos compartidos en redes sociales y el formulario de comentarios.

_gid,_gat,_ga
1P_JAR, CONSENT, NID, OGPC
disqus_unique, disqusauth

Pin It on Pinterest

Share This