TP WEBSERVICES 1 Pré-requis

publicité
Institut Galilée
Année 2016-2017
Programmation et Logiciels sûrs
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.univparis13.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
—
—
—
—
— de
— de
1.3
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
...
la librairie Apache de journalisation : commons-logging-1.1.1.jar
la librairie Apache CXF
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 unitaires
— 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 premiè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 ://localhost :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
—
—
—
—
—
—
—
—
3.2
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
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 intercepteurs 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
— Tester le client
— Utiliser le support SSL de Glassfish pour crypter les échanges
— Descripteur : https ://localhost :8181/WS_CXF_Secure/ICalculService ?wsdl
— Si erreur SSLHandshakeException → Ajouter certificat de Glassfish à la JVM
4
Utiliser des Webservices ouverts
NetBeans met à disposition les accès à différents webservices ouverts disponibles aux développeurs comme GoogleMap, FaceBook, Twitter, Youtube... Il en existe également accessible sur la toile directement via leur fichier de
description WSDL.
L’insertion de ces outils dans une application devient un jeu d’enfants avec l’IDE.
4.0.1
Ajouter une Map Google
Dans une application Web sous Netbeans, il suffit de de déplier l’arbre "Web Services" et de faire un drag’n drop
de getGoogleMap dans sa page JSP :
Les classes nécessaires sont ajoutées.
Il suffit de renseigner la propriété api_key dans le fichier de propriété :
org.netbeans.saas.google.googlemapservice.properties
Cette clé est disponible à l’aide d’un compte google :
http ://code.google.com/intl/fr/apis/maps/signup.html
4.0.2
Récupérer le temps d’une ville
Le but est de récupérer le temps d’une ville de France disponible à travers le service web GlobalWeather mis a
disposition par webservicex.net.
— Créer une application java de nom WS_weather
— Créer un service web client dont le descripteur se trouve à l’adresse :
http ://www.webservicex.net/globalweather.asmx ?WSDL
— Lister l’ensemble des villes dont le temps est disponible pour le pays France en utilisant la méthode GlobalWeatherSoap → getCitiesByCountry
— Récupérer les informations données pour une ville (Beauvais par exemple) en tuilisatant la méthode GlobalWeatherSoap → getWeather
— Analyser les données récupérées (date, température, hydrométrie...)
6
Téléchargement