vers l'accueil formulaire de contact

Tutoriel Struts1 N°10 : sécurité application Struts1

Sécurisez vos applications Struts1 sans la moindre ligne de code Java. Mettez en oeuvre l’API JAAS de JEE. Choisissez un Realm et configurez votre serveur d’applications. Découvrez pas à pas les étapes d’une authentification par formulaire avec informations de connexion dans une base de données.

Ce tutoriel vous est offert par Objis, le spécialiste de la formation Objis.

Suite à nos 10 tutoriaux struts1, consolidez vos compétences struts avec notre formation struts1 meilleures pratiques qui abordera également pàs à pas les thèmes suivants : migration struts1 vers struts2 et intégration de struts avec d’autres frameworks et outils : Spring, Hibernate, TopLik, iBatis, EJB3, Web Services, velocity, XDoclet...

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 Struts 1 Objis
- Objis, spécialiste formation java depuis 2005
- Site web du framework struts

Prérequis

- Installation Tomcat 6
- Téléchargement Eclipse Entreprise
- Intégration de tomcat dans eclipse
- Déploiement struts-blank dans eclipse

Objectifs

- Sécuriser une application struts de façon déclarative
- Comprendre la mise en oeuvre de JAAS

Programme

- Partie 1 : Création du projet web dynamique ’securitestruts’
- Partie 2 : Questions sur la sécurité J2EE
- Partie 3 : Création de la base de données
- Partie 4 : création et déclaration de la DataSource
- Partie 5 : Création du Realm
- Partie 6 : mise en place de la protection

Durée

- 30min

Partie 1 : création projet ’demostrutssecurite’

Une bonne pratique de développement struts est de commencer tout projet struts par le séquelle d’application struts-blank livré avec Struts.

INFO : Le tutoriel spring1 N°2 Déploiement struts-blank dans eclipse détaille cette opération.

Le point de départ de ce tutoriel est donc un projet eclipse avec tomcat intégré et struts-blank déployé.

TELECHARGEZ LE PROJET ECLIPSE A CETTE ETAPE

Partie 2 : Questions sur la sécurité J2EE

— Qu’est ce que JAAS ?
— Quelle difference entre Authentification et Autorisation ?
— Qu’est ce qu’un Realm ? Donner un exemple de Realm
— Où déclare t’on un Realm ?
— A quoi sert la balise ’security-constraint’ ? Ou se trouve t’elle ?
— Précisez ce qu’est une authentification de type FORM dans J2EE
— Quelles différences entre authentifications BASIC, FORM, DIGEST,CLIENT-CERT ?

Dans la suite de ce TP, vous allez :
- créer une base de données afin d’y stocker utilisateurs, mots de passe et roles
- créer et déclarer une DataSource JDBC pour votre application web
- créer un Realm JDBC
- mettre en oeuvre la protection des pages JSP et autres répertoires/ressources de l’application

Partie 3 : Création de la base de données

Nous avons choisit que les utilisateurs et leurs mots de passe seront stockés dans une base de données. La structure minimale de cette base est imposée par Tomcat . Cette structure peut être enrichie par des champs propres à l’application ( il n’est donc pas nécessaire d’avoir une base de données dédiée au stockage des utilisateurs).

Le schéma minimal se compose de deux tables : la première stocke les utilisateurs et leur mot de passe, la seconde associe des rôles à ces utilisateurs. Voici les commandes de création des tables (vous pouvez nommer les tables et les colonnes comme bon vous semble) :

PNG - 3.2 ko
tutoriel-struts-1-securite-creation-tables-jaas-database

Avec votre serveur de base de données (ici WAMP), créez une base de données nommée ’formation’

- Dans cette base de données exécutez le script securitejassdb.sql ci-contre. Il contient des 2 instructions ci-dessus.

- A travers l’interface phpMyAdmin, méttez en évidence la création des tables :

PNG - 20.4 ko
tutoriel-struts-1-securite-jaas-3

REMARQUE : Il est conseillé de mettre le nom d’utilisateur en clé primaire ou d’avoir un index unique dessus.

Une fois la base en place, il est nécessaire de créer l’entrée JNDI qui permettra d’y accéder.

Partie 4 : création et déclaration de la DataSource

Etape 1 : Driver JDBC

- Copiez le driver de la base de données dans le répertoire lib de tomcat 6.

Etape 2 : web.xml
- Ajoutez les lignes suivantes (sauf ligne web-app) dans tout en bas de votre fichier web.xml.

Vous déclarez que votre code fait référence à une source de données JNDI (DataSource JNDI) qui a pour nom JNDI "jdbc/formation".

Etape 3 : context.xml

- éditez le fichier context.xml de tomcat intégré à eclipse.

- Ajoutez entre les balises Context de début et de fin du fichier le code suivant :

Ce code configure et met à disposition une ressource JNDI nommée jdbc/formation à de toutes les applications déployées dans tomcat et possédant les informations de connexion.

Cette ressource JNDI est une base de données (ça tombe bien pour notre appli) configurée avec un pool de connexion DBCP (celui de Tomcat). Cette technique permet d’améliorer les performances de l’application, la création / fermeture d’une connexion JDBC étant couteuse.

Partie 5 : Création du Realm

Un Realm est un dispositif servant à identifier les utilisateurs. Il permet de faire l’association login/mot de passe afin de déterminer si l’utilisateur est correctement authentifié ou non.

Pour chaque utilisateur, le Realm connait la liste des rôles associés. Les rôles sont les responsabilités attribuées à un utilisateur donné. La protection des ressources se fait par rôle, c’est-à-dire que l’on indique le rôle dont doit disposer un utilisateur pour accéder à la ressource. L’alimentation du Realm (ajout d’utilisateurs et des rôles correspondants) est à la charge du développeur.

La configuration minimale d’un Realm s’appuyant sur une DataSource est la suivante (code à placer dans le fichier META-INF\context.xml) :

PNG - 4.3 ko
tutoriel-securite-struts-jaas-5

Partie 6 : mise en place de la protection

Définition des pages à protéger

PNG - 16.9 ko
tutoriel-struts-1-securite-jaas-8

— security-constraint
— login-config
— role-authent

Mise en place du formulaire

La mise en place du formulaire est relativement simple. Tout d’abord, bien sûr, il faut le créer. Il doit répondre à des critères au niveau des noms de champs et de l’action :

— Le champ correspondant au login doit s’appeler j_username ;
— Le champ du mot de passe doit s’appeler j_password ;
— L’action du formulaire doit être j_security_check.

Le formulaire résultant a donc l’aspect suivant :

PNG - 13.8 ko
tutoriel-securite-struts-jaas-6

Une fois le formulaire prêt, vous devez aussi créer une page d’erreur qui sera référencée dans le fichier de configuration.

Notez que la page de login et la page d’erreur peuvent toutes deux se trouver dans le répertoire protégé, cela ne pose pas de problème.

PNG - 5 ko
tutoriel-securite-struts-jaas-7

Si vous tentez désormais (après avoir relancé Tomcat) d’accéder à une des ressources protégées (ici tout éléments dans répertoire ’admin’) sans être identifié, vous devez passer par la page de login avant d’atteindre réellement la ressource.

Partie 7 : Déploiement

- Déployez l’application

Conclusion

Dans ce tutoriel, vous avez mis en œuvre une stratégie permettant de sécuriser l’accès à votre application Struts1. Cette stratégie est basée sur l’API JAAS et le savoir-faire du conteneur web d’un serveur d’applications JEE ou d’un moteur de servlets.

Prochaine formation STRUTS1

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

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