Acegi Security en una hora

Acegi Security ha estado generando un revuelo positivo entre los desarrolladores empresariales de Java, por lo que es posible que se pregunte cómo funciona. En este artículo, ShriKant Vashishtha lo guía a través de todos los pasos de una implementación práctica de Acegi Security. Primero, configurará los servicios de autenticación y autorización basados ​​en formularios para una aplicación web basada en Java, luego personalizará Acegi Security para la autorización dinámica, así como la integración con implementaciones de autenticación propietarias como LDAP.

Acegi Security es una solución de seguridad potente y flexible para aplicaciones empresariales Java creadas con el marco Spring. La inyección de dependencias basada en resortes hace que Acegi sea fácil de configurar e implementar de una manera completamente no intrusiva. Esto es una bendición para las organizaciones que quizás no quieran implementar el marco Spring en su totalidad, pero aún necesitan una seguridad eficaz y reutilizable para aplicaciones heredadas.

Este artículo le brinda un comienzo conciso para implementar Acegi Security para una aplicación básica de procesamiento de pedidos. Configurará los servicios de autenticación y autorización para la aplicación e implementará esas características de seguridad en páginas web basadas en formularios. Después de trabajar con el ejemplo, debería poder configurar la seguridad básica basada en formularios para cualquier aplicación web en aproximadamente una hora.

Después de una introducción rápida al ejemplo de implementación, aprenderá algunas de las formas en que puede personalizar la seguridad de la aplicación usando Acegi. Verá cómo configurar la autorización dinámica basada en roles basada en una base de datos que asigna roles de usuario a URL. Finalmente, descubrirá cómo crear una implementación de autenticación personalizada de Acegi Security que pueda integrarse con implementaciones de autenticación propietarias existentes.

Configuración del entorno

Quería demostrar la aplicabilidad de Acegi a una amplia gama de implementaciones, no solo a aplicaciones basadas en Spring. Construí la aplicación de ejemplo usando JEE 5, con JavaServer Pages para la capa de presentación y SiteMesh para el diseño web. La aplicación podría construirse fácilmente con Struts 2, y la infraestructura de Struts 2 ya está instalada en el código fuente, aunque no implementada. Usé la inyección de dependencia de Spring para implementar la seguridad de Acegi para la aplicación. Consulte la sección Recursos para descargar el código fuente de la aplicación. Siga estos pasos para configurar el entorno de la aplicación:

Paso 1. Descargue Acegi, Spring 2 y SiteMesh (consulte Recursos para obtener enlaces de descarga).

Paso 2. Cree la siguiente estructura de carpetas en un proyecto Java:

src - Contiene código fuente de Java

test - Contiene casos de prueba

config - Cualquier propiedad / archivo de configuración XML que deba estar dentro del classpath

web - Contiene la aplicación web

|

decorators - Contiene decoradores SiteMesh

images - Contiene imágenes, si las hay

scripts - archivos JavaScript

styles - Hojas de estilo en cascada (CSS)

WEB-INF

|

jsp - Contiene archivos JavaServer Pages (JSP)

lib - Contiene JAR

Paso 3. Copie los siguientes archivos JAR en el directorio WEB-INF / lib:

  • acegi-security-1.0.5.jar - Principales clases del sistema Acegi Security
  • cglib-2.1.3.jar - Biblioteca de generación de código utilizada por Spring
  • commons-codec-1.3.jar - Codificadores y decodificadores como Base64, Hex, Fonético y URL
  • commons-lang-2.1.jar- Utilidades auxiliares para java.langAPI
  • ehcache-1.2.3.jar - Utilizado para propósitos básicos de almacenamiento en caché
  • freemarker-2.3.8.jar - Utilizado por la implementación de Struts
  • jstl.jar, standard.jar - Biblioteca de etiquetas JavaServer Pages Standard Tag Library (JSTL)
  • log4j-1.2.13.jar - Para registrar
  • ognl-2.6.11.jar - Biblioteca OGNL utilizada por la implementación de Struts
  • sitemesh-2.3.jar - JAR SiteMesh
  • spring.jar - Spring Framework JAR
  • struts2-core-2.0.8.jar - Tarro de puntales 2 núcleos
  • xwork-2.0.3.jar - Utilizado por Struts

Cambios en web.xml

Debido a que Acegi Security se basa en el concepto de filtros e interceptores de servlets , debe agregar entradas para el FilterToBeanProxyfiltro al web.xmldescriptor de implementación de su aplicación , como se muestra en el Listado 1.

Listado 1. Agregar filtros de servlet a web.xml

  AcegiTraining  contextConfigLocation /WEB-INF/applicationContext*.xml   Acegi Filter Chain Proxy  org.acegisecurity.util.FilterToBeanProxy   targetClass  org.acegisecurity.util.FilterChainProxy    ... ...  Acegi Filter Chain Proxy /j_acegi_security_check   Acegi Filter Chain Proxy /j_acegi_logout   Acegi Filter Chain Proxy *.action   Acegi Filter Chain Proxy *.jsp  ... 

FilterToBeanProxyrequiere un parámetro de inicialización, targetClass. El targetClassparámetro ubica el primer objeto de la clase especificada en el contexto de la aplicación. En la configuración del Listado 1, esa clase es org.acegisecurity.util.FilterChainProxy. El objeto bean relacionado en el contexto de la aplicación se filterChainProxymuestra en el Listado 2.

Listado 2. filterChainProxy


    
     class="org.acegisecurity.util.FilterChainProxy"> ... 
    

Observe que el Listado 1 define múltiples asignaciones de filtros para el filtro Acegi. En su lugar, podría salirse con la suya utilizando una asignación de filtro más general, como se muestra en el Listado 3.

Listado 3. Un mapeo de filtros general

 Acegi Filter Chain Proxy /* 

Sin embargo, si usa el mapeo de filtros en el Listado 3, todas y cada una de las URL son interceptadas por el filtro Acegi. Y el filtro ahora también solicita detalles de autorización para recursos estáticos (JavaScript, CSS, HTML e imágenes), que es posible que no desee proteger. Puede evitar esta trampa mediante el uso de patrones de URL específicos.

El orden es fundamental a la hora de colocar filtros de servlets. Debido a que la aplicación de ejemplo usa filtros para Acegi, JSP y SiteMesh, primero debe colocar el filtro Acegi, seguido de los filtros JSP y SiteMesh, respectivamente.