Acegi Security en une heure

Acegi Security a généré un buzz positif sérieux parmi les développeurs d'entreprise Java, vous vous demandez peut-être comment cela fonctionne. Dans cet article, ShriKant Vashishtha vous guide à travers toutes les étapes d'une implémentation pratique de la sécurité Acegi. Vous allez d'abord configurer des services d'authentification et d'autorisation basés sur des formulaires pour une application Web basée sur Java, puis vous personnaliserez Acegi Security pour l'autorisation dynamique, ainsi que l'intégration avec des implémentations d'authentification propriétaires telles que LDAP.

Acegi Security est une solution de sécurité puissante et flexible pour les applications d'entreprise Java créées à l'aide du framework Spring. L'injection de dépendances basée sur Spring rend Acegi facile à configurer et à implémenter de manière totalement non intrusive. C'est une aubaine pour les organisations qui ne souhaitent peut-être pas implémenter le framework Spring dans son ensemble, mais qui ont tout de même besoin d'une sécurité efficace et réutilisable pour les applications héritées.

Cet article vous donne un aperçu concis de la mise en œuvre d'Acegi Security pour une application de traitement des commandes de base. Vous allez configurer les services d'authentification et d'autorisation pour l'application, et vous implémentez ces fonctionnalités de sécurité dans des pages Web basées sur des formulaires. Après avoir parcouru l'exemple, vous devriez être en mesure de configurer la sécurité de base basée sur un formulaire pour n'importe quelle application Web dans environ une heure.

Après une brève introduction à l'exemple d'implémentation, vous découvrirez certaines des façons dont vous pouvez personnaliser la sécurité des applications à l'aide d'Acegi. Vous verrez comment configurer une autorisation dynamique basée sur les rôles basée sur une base de données qui mappe les rôles utilisateur aux URL. Enfin, vous découvrirez comment créer une implémentation d'authentification Acegi Security personnalisée qui peut s'intégrer aux implémentations d'authentification propriétaire existantes.

Configuration de l'environnement

Je voulais démontrer l'applicabilité d'Acegi à un large éventail d'implémentations, pas seulement aux applications basées sur Spring. J'ai construit l'exemple d'application en utilisant JEE 5, avec JavaServer Pages pour la couche de présentation et SiteMesh pour la mise en page Web. L'application pourrait tout aussi facilement être créée à l'aide de Struts 2, et l'infrastructure Struts 2 est déjà en place dans le code source, bien qu'elle ne soit pas implémentée. J'ai utilisé l'injection de dépendances Spring pour implémenter la sécurité Acegi pour l'application. Consultez la section Ressources pour télécharger le code source de l'application. Suivez ces étapes pour configurer l'environnement d'application:

Étape 1. Téléchargez Acegi, Spring 2 et SiteMesh (voir Ressources pour les liens de téléchargement).

Étape 2. Créez la structure de dossiers suivante dans un projet Java:

src - Contient le code source Java

test - Contient des cas de test

config - Tout fichier de configuration de propriété / XML qui doit être dans le chemin de classe

web - Contient l'application Web

|

decorators - Contient des décorateurs SiteMesh

images - Contient des images, le cas échéant

scripts - Fichiers JavaScript

styles - Feuilles de style en cascade (CSS)

WEB-INF

|

jsp - Contient des fichiers JavaServer Pages (JSP)

lib - Contient des JAR

Étape 3. Copiez les fichiers JAR suivants dans le répertoire WEB-INF / lib:

  • acegi-security-1.0.5.jar - Principales classes du système de sécurité Acegi
  • cglib-2.1.3.jar - Bibliothèque de génération de code utilisée par Spring
  • commons-codec-1.3.jar - Encodeurs et décodeurs tels que Base64, Hex, Phonetic et URL
  • commons-lang-2.1.jar- Utilitaires d'assistance pour les java.langAPI
  • ehcache-1.2.3.jar - Utilisé à des fins de mise en cache de base
  • freemarker-2.3.8.jar - Utilisé par l'implémentation Struts
  • jstl.jar, standard.jar - Bibliothèque de balises JSTL (JavaServer Pages Standard Tag Library)
  • log4j-1.2.13.jar - Pour la journalisation
  • ognl-2.6.11.jar - Bibliothèque OGNL utilisée par l'implémentation Struts
  • sitemesh-2.3.jar - JAR SiteMesh
  • spring.jar - JAR Spring Framework
  • struts2-core-2.0.8.jar - JAR JAR à 2 noyaux
  • xwork-2.0.3.jar - Utilisé par Struts

Modifications apportées à web.xml

Étant donné qu'Acegi Security est basé sur le concept de filtres et d' intercepteurs de servlet , vous devez ajouter des entrées pour le FilterToBeanProxyfiltre au web.xmldescripteur de déploiement de votre application , comme indiqué dans le Listing 1.

Liste 1. Ajout de filtres de servlet à 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  ... 

FilterToBeanProxynécessite un paramètre d'initialisation, targetClass. Le targetClassparamètre localise le premier objet de la classe spécifiée dans le contexte d'application. Dans la configuration du listing 1, cette classe est org.acegisecurity.util.FilterChainProxy. L'objet bean associé dans le contexte de l'application est filterChainProxyprésenté dans le Listing 2.

Liste 2. filterChainProxy


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

Notez que le listing 1 définit plusieurs mappages de filtres pour le filtre Acegi. Vous pouvez à la place utiliser un mappage de filtre plus général, comme indiqué dans le Listing 3.

Listing 3. Une cartographie générale des filtres

 Acegi Filter Chain Proxy /* 

Cependant, si vous utilisez le mappage de filtre dans le listing 3, chaque URL est interceptée par le filtre Acegi. Et le filtre demande désormais des détails d'autorisation pour les ressources statiques (JavaScript, CSS, HTML et images), que vous ne souhaitez peut-être pas sécuriser. Vous pouvez éviter ce piège en utilisant des modèles d'URL spécifiques.

L'ordre est essentiel lors de la mise en place des filtres de servlet. Étant donné que l'exemple d'application utilise des filtres pour Acegi, JSP et SiteMesh, vous devez d'abord placer le filtre Acegi, suivi des filtres JSP et SiteMesh, respectivement.