Institut Galilée Programmation et Logiciels sûrs
Année 2016-2017 Master 2 PLS
TP WEBSERVICES
Résumé
L’objectif de ce TP de savoir réaliser un service web SOAP à l’aide de Netbeans en utilisant dans un premier la
librairie intégrée Metro, et dans un second, la librairie Apache CXF associée à Spring.
Dans chaque cas, on implémentera une couche de sécurité.
Ce TP non exhaustif n’a pas pour vocation de tout étudier et tout connaître sur les services web, mais plutôt de
permettre à l’étudiant de prendre en main progressivement une partie de la technologie soap.
1 Pré-requis
1.1 L’environnement de développement
Pour ce TP, l’environnement de développement utilisé est Netbeans, entre autre pour le fait que l’IDE intègre
le moteur de base de données Derby. Cet environnement est disponible dans les salles de TP de Galilée. Dans tous
les cas, le lecteur pourra trouver une version Linux de ces applications à cette adresse : http ://www-lipn.univ-
paris13.fr/ fortier/enseignement/applications/
1.2 Les librairies nécessaires
Les librairies nécessaires sont téléchargeables à cette adresse :
http ://www-lipn.univ-paris13.fr/ fortier/Enseignement/Webservices/TP/
Il s’agit :
— de certaines librairies Spring :
— org.springframework.beans-3.0.6.RELEASE.jar
— org.springframework.context-3.0.6.RELEASE.jar
— org.springframework.core-3.0.6.RELEASE.jar
— ...
— de la librairie Apache de journalisation : commons-logging-1.1.1.jar
— de la librairie Apache CXF
1.3 SOAPUI
Pour tester les services web, il existe un excellent outil développé en Java dédié "Soapui" que l’on peut trouver :
http ://www.soapui.org
Il permet entre autres de :
— debugger
— d’effectuer des tests uni-
taires
— automatiser des tests
— tester la montée en charge
— visualiser les messages soap
1
2 METRO
Netbeans intègre la gestion des webservice avec la librairie Metro. Son utilisation est donc extrêmement simple et
permet de créer très rapidement un service web opérationnel.
Le but de ce premier TP est de créer un web service qui calcule la somme de deux nombres fournis en paramètres.
Pour illustrer la méthode d’utilisation du web service, nous récupérerons la donnée “somme” dans une pre-
mière application en java, puis dans une seconde application J2EE. Nous aurions également pu créer une application
Php en utilisant le serveur web Apache et l’extension php-soap.
2.1 Le service web
— Créer une application Java Web Application de nom WS_METRO
— Créer un nouveau webservice : New >Web Service
— nom : calcul_ws
— package : m2pls
— Passer sur la vue design et créer une nouvelle opération "add" avec deux attributs entiers
— Passez sur la vue “source“, et modifiez la méthode add nouvellement comme dans le cours
— Déployez le projet
— Passez au test du service web, cliquez droit sur le Web Service "calcul_ws" →”Test web service“
Si vous utilisez Glassfish, vous pouvez directement tester le service web en entrant les deux valeurs à additionner.
Remarque : le numéro de port d’accès au Web Service (ici 8080) peut varier en fonction de la configuration de votre
serveur d’applications
— visualiser le descripteur wsdl : http ://localhost :8080/TP_WS_METRO/calcul_wsService ?WSDL
Ce fichier va maintenant pouvoir être utilisé pour déployer des applications utilisant le web service.
2.2 Un client Java
Pour tester le service web créé, on va créer une première application Java qui va l’interroger.
— Dans Netbeans, créer un projet Java de nom : WS_METRO_Client
— Créer un nouveau service client : New >Web Service Client
wsdl URL : http ://localhost :8080/WS_METRO/calcul_wsService ?WSDL
— Vérifier que les méthodes du web service sont bien retrouvées
— Créer un test unitaire permet de tester le webservice
→Faire un ”drag’ndrop“ de la méthode add dans la méthode de test
→Initialiser les deux variables i et j, par exemple à 5 et 4, renseignez le ”catch” pour afficher l’exception.
— Comparer le code généré avec celui du cours
— Vérifier le résultat de l’exécution
2.3 Un client Web
— Créer un nouveau projet WS_METRO_Web
— Créer un nouveau service client : New >Web Service Client
wsdl URL : http ://localhost :8080/WS_METRO/calcul_wsService ?WSDL
Comme précédemment, on peut constater que le webservice est bien retrouvé
— Faire un “drag’ndrop” de la méthode add du ws dans le fichier index.jsp
2
— Comme précédemment, initialiser les deux variables i et j, par exemple à 5 et 4, renseignez le “catch” pour
afficher l’exception
— Exécuter le projet et vérifier le résultat
2.4 Sécuriser le Webservice
Le but de ce TP est d’ajouter une couche de sécurité au service web créé à l’étape 1.
Il est nécessaire d’utiliser Glassfish qui intègre différents outils de sécurisation comme le chiffrage SSL (par défaut
sur le port 8181), la gestion de la sécurité des messages Soap... Le serveur d’applications utilise la notion de domaine
dans lequel se trouve l’ensemble de l’environnement nécessaire à l’exécution d’applications web. A son initialisation,
le domaine comprend des certificats utilisables pour sécuriser les transferts. En fonction des configurations du
domaine de travail, il pourra être nécessaire de modifier les certificats utilisés par glassfish via la commande keytool
(http ://docs.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html).
Dans le cas présent, nous allons utiliser le mode "Username Authentication with Symmetric Keys".
Il s’agit d’utiliser l’utilisateur créé lors de l’initialisation du domaine Glassfish, ainsi que les certificats pour le client
et le serveur.
2.4.1 Sécurisation du service
— Dupliquer le projet WS_METRO en WS_METRO_Secure, et s’assurer que le projet fonctionne
— Cliquer droit sur calcul_ws →"Edit Web Service Attributes"
— Cocher "Secure Service"
— Modifier la location du keystore pour trouver celui du domaine Glassfish (le mot de passe par défaut est
changeit), et sélectionnez l’alias "s1as"
3
— Les tests sur ce service web sécurisé ne fonctionnent pas, mais le fichier de description se trouve : http ://local-
host :8080/WS_METRO_Secure/calcul_wsService ?WSDL
2.4.2 Sécurisation du client
— Créer un client Java de nom WS_METRO_Secure_Client
— Tester le webservice securisé précédent
→Le service web n’est utilisable que par certificat
— Cliquer droit sur calcul_ws →"Edit Web Service Attributes"
— Cocher/décocher "use development defaults"
Cela active la librairie Metro au niveau du client et renseigne l’utilisateur créé lors de l’initialisation du domaine
Glassfish wsitUser
Remarque : la création d’un autre utilisateur se fait via :
# <DOMAINE_HOME>/asadmin create-file-user –groups wsit wsitUser
— Modifier le truststore en choisissant celui utilisé par Glassfish cacerts.jks (mot de passe par défaut est changeit),
et l’alias "s1as"
— Exécuter le client et vérifier les transferts
4
3 Apache CXF
Dans cette partie, nous allons étudier le framework de développement de webservice Apache CXF. Pour simplifier
sa mise en œuvre, nous utiliserons Spring.
Objectif : créer un webservice retournant la somme de deux nombres.
3.1 Le service web
— Créer une application web dans Netbeans de nom WS_CXF
— Ajouter les librairies nécessaires contenues dans l’archive Librairies.tar.gz
— Créer une classe Calcul dans le package entite contenant deux attributs entiers i et j, ainsi que les accesseurs
— Créer l’interface service.CalculService contenant le prototype d’une méthode d’ajout de deux entiers
— Créer la classe service.CalculService implémentant l’interface précédente
— Créer le fichier de configuration de Spring applicationContext.xml à la racine du classpath des sources
— Modifier le fichier web.xml
— Déployer l’application et visualiser le descripteur WSDL généré
http ://localhost :8080/WS_CXF/ICalculService ?wsdl
3.2 Un client Java classique
— Sans CXF
— Créer une application Java de nom WS_CXF_Client
— Créer le service web client à partir du WSDL généré précédemment
— Comme pour Metro, tester la méthode proposée par le webservice individuService
— Analyser les sources générées (jax-ws) dans le package service
— Avec CXF
— Ajouter les libraires CXF au projet
— Ajouter la méthode de test
— Analyser les résultats
— Avec CXF et Spring
— Ajouter les libraires CXF au projet
— Ajouter la méthode de test
— Créer le fichier de configuration de Spring applicationContext.xml à la racine du classpath des sources
— Tester les deux appels de Bean Spring possibles
3.3 Enrichissement du service web
— Ajouter une nouvelle méthode dans l’interface ICalculService permettant de faire la soustraction de deux
nombres
— Implémenter cette méthode qui doit retourner un entier
— Redéployer le webservice
— Analyser les sources générées
— Ajouter une méthode de tests au client
3.4 Sécurisation du webservice
Pour ce TP, on va partir des projets WS_CXF et WS_CXF_Client que l’on va dupliquer en WS_CXF_Secure
et WS_CXF_Client_Secure.
3.4.1 Sécurisation du service
— Dans le projet WS_CXF_Secure, modifier le fichier de configuration de Spring comme présenté dans le cours
en ajoutant les intercepteurs nécessaires pour implémenter WS-security
— Créer le validateur de token en implémentant la méthode "verifyPlaintextPassword"
— Relancer le service web et vérifier la disponibilité de son descripteur
http ://localhost :8080/WS_CXF_Secure/ICalculService ?wsdl
3.4.2 Sécurisation du client
— Dans le projet WS_CXF_Spring_Secure, modifier le fichier de configuration de Spring en ajoutant les inter-
cepteurs nécessaires pour implémenter WS-security
— Créer le callbackHandler test.PWCallbackHandler fournissant le couple identifiant / Mot de passe nécessaire à
la connexion au service web
5
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!