vers l'accueil formulaire de contact

Tutoriel Spring N°10 : sécurité Spring

Découvrez et mettez en œuvre les étapes clés de la sécurisation d’une application web avec Spring security, le module de sécurité du framework Spring.Bénéficiez de la technique d’injection de dépendance de Spring (voir notre tutoriel N°2)

Ce tutoriel est un extrait de séances pratiques de la formation SPRING dispensée par Objis.

Les + objis
- 70% de travaux pratiques
- Clé USB avec tous les outils utilisés + Corrigés TPs
- Bilan pédagogique individuel + conseils

Liens utiles

- + de 100 tutoriaux java/jee Objis
- 10 tutoriaux spring framework objis
- Objis, spécialiste formation java depuis 2005
- Site officiel Spring IDE
- Site officiel Spring Source Tool Suite (STS)

Prérequis, outils et versions


- JDK 6
- Eclipse 3.3.2 europa Entreprise
- Spring 2.5.4
- Spring IDE 2.1.0
- Tomcat 6

- Tutoriel Spring N°2 : injection de dépendances

Pour ce Tutoriel, le plugin Eclipse Spring IDE doit être au préalable correctement installé. Le tutoriel ’Installation plugin Spring IDE’ vous permet de maîtriser l’installation de Spring IDE.

Liens utiles

- 10 tutoriaux spring framework objis

Objectifs

- Maîtriser les étapes de sécurisation d’une application web avec Spring.
- Mettre en œuvre ces étapes en sécurisant l’application PetClinic livrée avec Spring
- S’authentifier à travers une base de données avec Spring
- Mettre en œuvre différents filtres proposés par Spring
- Gérer les écrans en fonction des rôles utilisateurs

Programme

- Partie 1 : Installation et lancement de Petclinic
- Partie 2 : Création et sécurisation application ’demospringsecurity’
- Partie 3 : Sécurisation de l’application PetClinic
- Partie 4 : Sécurité Database
- Partie 5 : Api de Sécurité pour la vue

Durée

1h00.

Introduction

Petclinic est une des applications exemples fournies avec Spring, dans le répertoire \docs\samples.

L’application Petclinic n’est pas sécurisée par défaut. Nous allons dans un premier temps l’installer (partie 1), puis, en s’inspirant d’une application sécurisée (partie 2), la sécuriser.

Partie 1 : Installation et lancement de Petclinic

- 1. Dans un "Invite de commade"(MS-DOS), allez dans le répertoire SPRING_HOME/samples/petclinic (SPRING_HOME étant le répertoire d’installation de Spring).

Création de petclinic.war

- 2. Lancez la commande :> build warfile . Cette commande génère un fichier petclinic.war présent dans le répertoire SPRING_HOME\samples\petclinic\dist . Validez le message ’BUILD SUCCESSFULL’ à la fin du build.

Création de la base de données HSQLDB

- 3. Dans une autre "Invite de commade" Lancez la base de données de l’application (par défaut HSQLDB, base de données 100% java) à travers la commande SPRING_HOME\petclinic\db\hsqldb> server.bat , HSQLDB étant déjà incluse dans Spring. Ci-dessous déroulement du lancement.

La base de données à donc prête.

- 4. Copiez le fichier \dist\weaving\spring-tomcat-weaver.jar de Spring vers "TOMCAT_HOME/lib", TOMCAT_HOME étant le répertoire d’installation de Tomcat 6.

- 5. Copiez petclinic.war dans répertoire TOMCAT_HOME/webapps .

- 6. Créez un fichier de contexte petclinic.xml dans TOMCAT_HOME/conf/Catalina/localhost (Catalina/localhost à créer) avec le contenu suivant :

- 7.Lancez tomcat puis aller à : http://localhost:8080/petclinic dans la barre d’adresse. Vous pouvez voir l’application tourner.

REMARQUE : pour voir le contenu de la base de données, lancer dans une nouvelle invite de commande, et à partir du répertoire \samples\petclinic\db\hsqldb la commande : java cp "SPRING_HOME\lib\hsqldb\hsqldb.jar" org.hsqldb.util.DatabaseManager, SPRING_HOME étant le répertoire d’installation de Spring.

- Connectez vous au serveur HSQLDB et observez le jeu de données et re résultat d’opérations de persistence.

- QUESTION : Qu’apporte le lien ’Tutorial’ comme information ? Et les autres liens ?

Partie 2 : Installation d’une application sécurisée

- Déployez dans Tomcat le war spring-security-samples-tutorial-2.0.4.war présent dans SPRING_HOME\spring-security-2.0.4\dist

- Lancez ensuite le navigateur : http://localhost:8080/spring-security-samples-tutorial-2.0.4.

- Analysez l’arborescence de l’application, ainsi que le le fichier \WEB-INF\ApplicationContext-security.xml

- Quels sont les librairies impliquées dans la sécurité Spring de l’application ?

Partie 3 : Création et sécurisation application ’demospringsecurity’

Dans cette partie vous allez créer pas à pas une application web et la sécuriser avec Spring MVC.
- Créez dans eclipse un projet web dynamique ’demospringsecurity’
- Créez une page d’accueil index.htm

Configuration du web.xml

- Imposez la page index.htm comme étant la page d’accueil ()
- Déclarez l’intercepteur de sécurité . Pour cela, ajoutez le contenu suivant dans le fichier web.xml

La classe Spring DelegatingFilterProxy délègue la sécurité à une implémentation interne ici apellée springSecurityFilterChain, qui est dédiée à la gestion de la sécurité Spring.

REMARQUE : vous ne devez pas utiliser le bean springSecurityFilterChain vous-même. Une fois ajouté au web.xml, vous n’avez plus qu’à configurer les services de sécurité dans le fichier de définition de bean Spring à travers la balise

- Configurez le chargeur de définition des beans : ContextLoaderListener

Le fichier web.xml est désormais bien configuré.

Capacités Spring du projet Eclipse

- Ajoutez des capacités Spring à votre projet (cliquez droit sur le projet puis Spring Tools/Add Spring Nature)

Configuration de objisapp-security.xml

- A l’aide de l’assistant de création de fichier de définition de Spring de Spring IDE, créez le fichier \WEB-INF\objisapp-security.xml

- Ajoutez les elements necessaire à la mise en oeuvre de la configuration sécurité spring. En particulier le namespace security. Vous obtenez un fichier comme celui-ci :

Definir sa stratégie de sécurité

- Ajoutez les lignes suivantes au fichier ApplicationContext-security.xml

Signifie que

— Toutes les URLs de l’application sont sécurisées (pattern="/**")
— Seuls les utilisateurs posédant un rôle ROLE_USER ont accès aux URLs
— Par défaut (auto-config="true") Spring proposera les services
— > une page formulaire avec champs login/password
— > Fonction ’se rappeller de moi’ (remember me)

REMARQUE : il peut y avoir plusieurs . L’ordre est important. Le premier qui vérifie une contrainte pour une ressource donnée sera appliqué à la ressource.

Ajout d’utilisateurs authorisés

Ajoutez les lignes suivantes :

Nous y deffinissons 2 utilisateurs, leurs mots de passe et leur rôles. Les rôles entrent en jeu lors du contrôle d’accès que Spring réalise sur les ressources/URLs demandées, après l’étape d’authentification de l’utilisateur .

Ajout librairie Spring, Spring Security, Log4j

Dans le répertoire \WEB-INF\lib, ajouter les jars suivants

pour Spring :
- spring.jar présent dans \SPRING_HOME\dist
- spring-web.jar présent dans \SPRING_HOME\dist\modules

Pour Spring Security :
- spring-security-core-2.0.4.jar présent dans \SPRING_SEC_HOME\dist
- spring-security-core-tiger-2.0.4.jar présent dans \SPRING_SEC_HOME\dist
- spring-security-acl-2.0.4.jar présent dans \SPRING_SEC_HOME\dist
- spring-security-taglibs-2.0.4.jar présent dans \SPRING_SEC_HOME\dist commons-codec-1.3.jar \SPRING_HOME\lib\jakarta-commons

Pour Log4j :
- commons-logging.jar présent dans \SPRING_HOME\lib\jakarta-commons
- log4j.jar présent dans \SPRING_HOME\lib\log4j. Ajoutez également le fichier log4j.xml utilisé dans les précédents Tps. Le mettre dans ’src. Il apparaitra dans ’

Lancement de l’application

- Clic droit\Run as\Run on server. Un ecran d’authentification apparaît

- Proposer un mauvais login/pwd (ex : toto/toto). Vous obtenez l’écran ci-dessous.

- Proposez le login/pwd d’un des utilisateurs déclarés dans ApplicationContext-security.xml. Par exemple : douglas/objis. Vous accédez alors à l’écran d’accueil de l’application

REMARQUES :

1) Vous n’avez pas eu besoin de créer l’écran de login/pwd. Spring le fait pour vous.

2) Vous n’avez pas eu besoin de gérer la validation des champs du formulaire de login. Spring le fait pour vous.

3) Le service ’remember me’ est disponible.

TELECHARGEZ le PROJET à CETTE ETAPE

Partie 3 : Sécurisation de l’application PetClinic

Dans cette partie, vous mettez en oeuvre votre savoir-faire acquis au TP3 pour sécuriser l’accès à l’application PetClinic.

Ajout de librairies de sécurité

- Recopiez les fichiers suivants de l’application ’springdemosecurity’ dans PetClinic :

1.\WEB-INF\lib\spring-security-core-2.0.4.jar dans samples\petclinic\war\WEB-INF\lib 2.\WEB-INF\lib\spring-security-core-tiger-2.0.4 dans samples\petclinic\war\WEB-INF\lib 3.\WEB-INF\lib\spring-security-acl-2.0.4.jar dans samples\petclinic\war\WEB-INF\lib 4.\WEB-INF\lib\spring-security-taglibs-2.0.4.jar dans samples\petclinic\war\WEB-INF\lib 5.\WEB-INF\lib\commons-codec-1.3.jar dans samples\petclinic\war\WEB-INF\lib

Copie du fichier ApplicationContext-security.xml

- Copiez \WEB-INF\ApplicationContext-security.xml de ’demospringsecurity’ dans samples\petclinic\war\WEB-INF

Mise à jour du fichier de configuration : web.xml

- Mettez à jour le fichier web.xml de l’application PetClinic , avec les éléments suivants du web.xml de demospringsecurity :

Filtre de sécurite (springSecurityFilterChai) Chargement du fichier ApplicationContext-security.xml

Lancement de la version sécurisée

- Lancez à nouveau le build du war petclinic.war
- Déployez le nouveau petclinic.war
- Testez à nouveau : http://localhost:8080/petclinic

Partie 4 : Sécurité Database

Vous devez créer une application permettant aux participants des formations Objis d’avoir un espace privé, tout comme les formateurs, les commerciaux et l’équipe de maintenance du matériel et salles informatiques des formations.

- En utilisant le cours ainsi que la documentation officielle Spring, mettez en œuvre d’une authentification basée sur des login/pwd stockés non pas sur un fichier mais dans une base de données MySQL.

Les roles suivants sont identifiés : ROLE_FORMATEUR, ROLE_PARTICIPANT, ROLE_COMMERCIAL, ROLE_MAINTENANCE

Ci-dessous quelques éléments du fichier de beans objisapp-security.xml

Tables utilisateurs et roles

Table des utilisateurs :

Et la table des roles

Page de login

Partie 5 : Api de Sécurité pour la vue

A partir de l’application Tiles définie précedement , et en utilisant le cours ainsi que la documentation officielle de Spring, proposez , suivant l’utilisateur connecté , 2 menus différent :

- Profil participant : (login/pwd : max/max)
- Profil Employe : (login/pwd : douglas/objis)

Le fichier Menu.jsp pourrait ressembler à :

A noter la déclaration suivante

Récupérer le login et le role

Test avec utilisateur profil formateur

Login :

Résultat :

Test avec utilisateur profil participant

Login :

Résultat :

TELECHARGEZ le PROJET SECURISATION AVEC BASE DE DONNEES

Conclusion

Dans ce tutoriel, nous avons mis en oeuvre quelques configuration de Spring Security.

Prochaine formation SPRING

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur Spring :

Pour aller plus loin : le réseau Objis

Si vous appréciez notre sens du partage, devenez gratuitement membre ’classic’ du Club Objis :
- Votez pour les prochains tutoriaux à publier
- Préparez vos entretiens techniques
- Valorisez votre profil / expertise
- Identifiez des opportunités d’emploi
- Recevez la newsletter objis.com