WEBSERVICES. Michael Fortier. Master Informatique 2ème année. fortier@lipn.univ-paris13.fr A308, Université de Paris 13



Documents pareils
TP WEBSERVICES. 1 Pré-requis. 1.1 L environnement de développement. 1.2 Les librairies nécessaires 1.3 SOAPUI

SOAP Concepts Application à Glassfish

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Introduction aux «Services Web»

4. SERVICES WEB REST 46

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Architecture Orientée Service, JSON et API REST

Messagerie asynchrone et Services Web

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Urbanisation des SI Conduite du changement IT 20/03/09. Patrick CHAMBET

Compte Rendu d intégration d application

Introduction aux. services web 2 / 2

BPEL Orchestration de Web Services

La démarche SOA et l interopérabilité applicative

Création d une application JEE

Responsable du cours : Héla Hachicha. Année Universitaire :

Remote Method Invocation (RMI)

Création d un service web avec NetBeans 5.5 et SJAS 9

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Plateforme PAYZEN. Définition de Web-services

Classification : public 1/59

Applications et Services WEB: Architecture REST

Environnements de Développement

Sécurité des Web Services (SOAP vs REST)

Hébergement de sites Web

Business Process Execution Language

Remote Method Invocation en Java (RMI)

Architectures Web Services RESTful

Mise en œuvre des serveurs d application

Auto-évaluation Aperçu de l architecture Java EE

Volet Synchrone pour Client Lourd

Définition des Webservices Ordre de paiement par . Version 1.0

Paris Airports - Web API Airports Path finding

IFIPS 5 / Nouvelles Architectures Logicielles Projet : Bus de web services avec «moteur» BPEL

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

ADMINISTRATION DE ADOBE LIVECYCLE MOSAIC 9.5

Programmation Web Avancée Introduction aux services Web

Introduction à la plateforme J2EE

Le cadre des Web Services Partie 1 : Introduction

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Les Services Web. Jean-Pierre BORG EFORT

2 Chapitre 1 Introduction

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Configuration Interface for MEssage ROuting

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Intégration d'applications à "gros grain" Unité d'intégration : le "service" (interface + contrat)

Solutions d accès sécurisées pour opérer une Market Place Saas multitenante

Patrons de Conception (Design Patterns)

Alfstore workflow framework Spécification technique

Sécurisation des architectures traditionnelles et des SOA

Projet ESB - Retour d expérience

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

La sécurité des processus métiers et des transactions. Stéphane Marcassin Bull Services Sécurité

CQP Développeur Nouvelles Technologies (DNT)

Web Services : Beyond the peer-to-peer architecture

J2EE - Introduction. Développement web - Java. Plan du chapitre

PRIMAVERA P6 ENTERPRISE PROJECT PORTFOLIO MANAGEMENT WEB SERVICES

Web Tier : déploiement de servlets

Oauth : un protocole d'autorisation qui authentifie?

25 septembre Migration des accès au Registre national en protocole X.25 vers le protocole TCP/IP, pour les utilisateurs du Registre national

Projet Java EE Approfondi

RMI le langage Java XII-1 JMF

Cloud. Définition? 08/11/2012. James Urquhart The Wisdom of Clouds

Tour d horizon des différents SSO disponibles

Le modèle client-serveur

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Java Naming and Directory Interface

Objectif : Passer de l analyse métier et fonctionnelle à la définition des applications qui

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Software Engineering and Middleware A Roadmap

Application web de gestion de comptes en banques

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Utilisation de Jakarta Tomcat

Nouvelles technologies pour l intégration : les ESB

API Web Service TéléAlerte

Calcul Parallèle. Cours 5 - JAVA RMI

Composants Logiciels. Le modèle de composant de CORBA. Plan

Architecture SOA Un Système d'information agile au service des entreprises et administrations

Urbanisme du Système d Information et EAI

Dis papa, c est quoi un bus logiciel réparti?

Bases Java - Eclipse / Netbeans

FOSS Enterprise Integration Plattaform

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Les processus métiers : concepts, modèles et systèmes

Programmation Par Objets

NFP111 Systèmes et Applications Réparties

Environnements de développement (intégrés)

Remote Method Invocation Les classes implémentant Serializable

JOnAS 5. Serveur d application d

30 ans d ingénierie, 23 ans de conseil en architecture de SI

Programmer en JAVA. par Tama

Plan du cours. Historique du langage Nouveautés de Java 7

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

La suite logicielle Lin ID. Paris Capitale du Libre 25 septembre 2008

Transcription:

WEBSERVICES Michael Fortier Master Informatique 2ème année fortier@lipn.univ-paris13.fr A308, Université de Paris 13 https ://lipn.univ-paris13.fr/ fortier/enseignement/webservices/

Sommaire 1 Rappels 2 METRO 3 Apache CXF Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 2 / 43

Sommaire 1 Rappels 2 METRO 3 Apache CXF Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 3 / 43

RAPPELS Service web : logiciel qui interagit avec d autres au moyen de protocoles universels (http, xml...) Deux formes : SOAP : Simple Object Access Protocol Orienté objet, gère les états Protocole basé sur XML et qui définit les mécanismes d échanges d information entre les clients et les fournisseurs de service-web Les messages SOAP sont susceptibles d être transportés en HTTP, SMTP, FTP... XML-RPC : Remote Procedure Call Procédural et sans gestion des états Permet l invocation de procédure distante sur internet Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 4 / 43

Caractéristiques des WS Enregistrement facultatif auprès d un service de recherche (UDDI) Annuaire Interface publique avec laquelle le client invoque le service (WSDL) Description Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 5 / 43

SOAP : deux modes de communication SOAP RPC : appel synchrone de procédures distantes Un nœud SOAP envoie une requête SOAP avec des paramètres et reçoit une réponse en retour messages SOAP : communication orientée message des nœuds SOAP envoient et reçoivent des documents XML de manière synchrone ou non Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 6 / 43

Structure d un message SOAP Une enveloppe qui définit le contenu du message Un en-tête (optionnel) qui contient les informations d en-tête (autorisations et transactions par exemple) Un corps contenant les informations sur l appel et la réponse Une gestion d erreur qui identifie la condition d erreur des attachements (optionnel) Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 7 / 43

Éléments SOAP actor : indique le point d arrivée d un élément d en-tête. Un message SOAP peut passer par un ensemble d intermédiaires avant d arriver à sa destination finale Possibilité de cibler un attribut vers un de ces points intermédiaires via cet attribut encodingstyle : sert à définir les types de données contenu dans le document mustunderstand : sert à définir si le destinataire d un message doit traiter un élément d en-tête (absence de cet attribut = false) Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 8 / 43

WSDL Format de description des services web fondé sur XML Communication par échange de messages Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 9 / 43

WSDL définit les Types : un système de types applicable à des données (Utilisation de XML Schema) le Message : données échangées entre services web ( appel de procédure) le Type de Port (porttype) : opérations du service web et les messages impliqués ( interface Java) La Liaison (binding) : format des messages ( Implémentation de l interface) Le Port : point de terminaison identifié de manière unique par la combinaison d une adresse internet et d une liaison Un Service Web (service) : associe des liaisons à des process concrets de mise en œuvre des opérations qu elles décrivent Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 10 / 43

Sommaire 1 Rappels 2 METRO 3 Apache CXF Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 11 / 43

JAX-WS RI + WSIT JAX-WS Implémentation API Java pour WS XML Cœur des WS Architecture extensible et modulaire Web Services Interoperability Technology Assure QoS (Sécurité, transactions...) Implémentation des spécifications WS-* (interopérabilité.net) Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 12 / 43

METRO Communauté IBM Jdk, Glassfish, Oracle... OpenSSO, OpenESB, Wiseman Forums, mailing Lists actifs populaire http ://metro.java.net Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 13 / 43

METRO : Architecture Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 14 / 43

Fonctionnalités Intégration à Netbeans simplicité Utilisations de Pojo via annotations Indépendance de l encodage, du protocole et transport Intégration JAXB (Java Architecture for XML Binding) Plateforme 100% Java 100% XML Schema Support Communications optimisées Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 15 / 43

Fonctionnement Le client manipule une interface métier. Il ne sait pas que le composant est un WS Le service est sollicaité via son interface métier Client JAX-WS Messages SOAP Service JAX-WS JAX-WS s'occupe de la transformation du modèle objet / message SOAP Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 16 / 43

Etude de cas simple Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 17 / 43

Processus de développement : Partie serveur Netbeans Générer la classe WS, transparent TP/WS_METRO/src/java/m2pls/calcul_ws.java @WebService() public class calcul_ws { @WebMethod(operationName = "add") public int add(@webparam(name = "i") int i, @WebParam(name = "j") int j) { int k = i + j; return k; } } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 18 / 43

Processus de développement : Partie client } Netbeans Générer les interfaces du WS TP/WS_METRO_Client/test/WSTest.java @Test public void test() { try { // Creation du WS client m2pls.calculwsservice service = new m2pls.calculwsservice(); m2pls.calculws port = service.getcalculwsport(); // Initialisation int i = 4; int j = 5; // Appel du WS int result = port.add(i, j); // Affichage du resultat System.out.println("Result = " + result); } catch (Exception ex) { ex.printstacktrace(); } } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 19 / 43

Sécuriser un WS avec Metro Différents types de sécurisation : Username Authentication with Symmetric Keys Mutual Certificates Security. Transport Security (SSL). Message Authentication over SSL. SAML Authorization over SSL Endorsing Certificate SAML Sender Vouches with Certificates SAML Holder of Key Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 20 / 43

Sécuriser un WS avec Metro Fort couplage Netbeans Glassfish Metro Génération automatique Tests en TP Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 21 / 43

Sommaire 1 Rappels 2 METRO 3 Apache CXF Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 22 / 43

Framework Framework de développement de WS Projet Apache 2.7.x Intégration facile dans des projets existants (à partir des interfaces) Intégration à Spring http ://cxf.apache.org/ Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 23 / 43

Fonctionnalités Support des standards WS-* : WS-Basic Profile, WS-Addressing, WS-Policy, WS-Security Support de JAX-WS (inclus JAXB et SAAJ) Support de SOAP, WSDL, MTOM Développement basé sur POJO annotés (facilité) Nombreux outils intégrés Nombreux formats transport : Http(s), JMS, CXF Format données : XML, JSON Plusieurs stratégies binding XML : JAXB, Aegis Plusieurs stratégies de binding non-xml : json, corba, jbi, sca Déploiement flexible : serveurs J2EE, intégration sca (Tuscany) et jbi (service engine pour ServiceMix, OpenESB, Petals) Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 24 / 43

Fonctionnement Incoming : RECEIVE (PRE/USER/POST)_STREAM READ Outcoming : (PRE/USER/POST)_PROTOCOL UNMARSHAL (PRE/USER/POST)_LOGICAL PRE_INVOKE INVOKE POST_INVOKE SETUP (PRE/USER/POST)_LOGICAL PREPARE_SEND PRE_STREAM PRE_PROTOCOL WRITE MARSHAL (USER/POST)_PROTOCOL (USER/POST)_STREAM Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 25 / 43

Interceptor Client Endpoint Service Bus (backbone de l architecture) Binding Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 26 / 43

Etude de cas simple Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 27 / 43

Processus de développement : Partie serveur Fournir une interface + une classe d implémentation qui seront annotées avec les annotations de l API JAX-WS package service; import javax.jws.webservice; @WebService public interface ICalculService { public int add(int i, int j); } TP/WS_CXF/src/java/service/ICalculService.java package service; TP/WS_CXF/src/java/service/CalculService.java public class CalculService implements ICalculService{ public int add(int i, int j){ return i+j; } } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 28 / 43

Processus de développement : Partie serveur Configurer Spring pour déclarer le bean de service web TP/WS_CXF/src/java/applicationContext.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:meta-inf/cxf/cxf.xml" /> <import resource="classpath:meta-inf/cxf/cxf-extension-soap.xml" /> <import resource="classpath:meta-inf/cxf/cxf-servlet.xml" /> <bean id="calculservice" class="service.calculservice" /> <jaxws:endpoint id="calculserviceendpoint" implementor="#calculservice" address="/icalculservice" /> </beans> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 29 / 43

Processus de développement : Partie serveur Configurer la Servlet CXF dans le fichier web.xml TP/WS_CXF/web/WEB-INF/web.xml <?xml version="1.0" encoding="utf-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <context-param> <param-name>contextconfiglocation</param-name> <param-value> classpath:applicationcontext.xml </param-value> </context-param> <servlet> <servlet-name>calculservlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.cxfservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>calculservlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> < Michael! */ Fortier > (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 30 / 43

Processus de développement : Partie client Génération des classes clientes à partir du WSDL Outils Netbeans (Metro) Outils CXF : wsdl2java Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 31 / 43

Processus de développement : Partie client Exécution classique, sans Spring TP/WS_CXF_Client/test/WSTest.java @Test public void testcxf(){ try { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getininterceptors().add(new LoggingInInterceptor()); factory.getoutinterceptors().add(new LoggingOutInterceptor()); factory.setserviceclass(icalculservice.class); factory.setaddress("http://localhost:8080/ws_cxf/icalculservice?wsdl"); ICalculService client = (ICalculService) factory.create(); int i = 4; int j = 5; int result = client.add(i, j); System.out.println("Result 2 = " + result); } catch (Exception ex) { ex.printstacktrace(); } } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 32 / 43

Processus de développement : Partie client Utilisation de Spring TP/WS_CXF_Client/src/applicationContext.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <bean id="clientfactory" class="org.apache.cxf.jaxws.jaxwsproxyfactorybean"> <property name="serviceclass" value="service.icalculservice"/> <property name="address" value="http://localhost:8080/ws_cxf/icalculservice?wsdl"/> </bean> <bean id="calcul" class="service.icalculservice" factory-bean="clientfactory" factory-method="create"/> <jaxws:client id="calcul2" serviceclass="service.icalculservice" address="http://localhost:8080/ws_cxf/icalculservice?wsdl" /> </beans> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 33 / 43

Processus de développement : Partie client Exécution avec Spring : 1ère méthode TP/WS_CXF_Client/test/WSTest.java @Test public void testspring() { String[] paths = {"applicationcontext.xml"}; ApplicationContext ctx = new ClassPathXmlApplicationContext(paths); ICalculService client = (ICalculService) ctx.getbean("calcul"); int i = 4; int j = 5; int result = client.add(i, j); System.out.println("Result = " + result); } Exécution avec Spring : 2ème méthode TP/WS_CXF_Client/test/WSTest.java @Test public void testspring2() { String[] paths = {"applicationcontext.xml"}; ApplicationContext ctx = new ClassPathXmlApplicationContext(paths); ICalculService client = (ICalculService) ctx.getbean("calcul2"); int i = 4; int j = 5; int result = client.add(i, j); System.out.println("Result = " + result); } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 34 / 43

Securiser un WS avec CXF Utilisation de WS-security : http ://cxf.apache.org/docs/ws-security.html Utilisation d une méthode d authentification Token Identifiant/Mot de passe Cryptage du transport -> HTTPs, token sécurisés Utiliser le support du serveur d applications (port 8181 pour Glassfish) Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 35 / 43

Securiser un WS : Configuration dans Spring TP/WS_CXF_Secure/src/java/applicationContext.xml <?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:cxf="http://cxf.apache.org/core" xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:meta-inf/cxf/cxf.xml" /> <import resource="classpath:meta-inf/cxf/cxf-extension-soap.xml" /> <import resource="classpath:meta-inf/cxf/cxf-servlet.xml" /> <!-- Interceptors --> <bean id="login" class="org.apache.cxf.interceptor.loggingininterceptor" /> <bean id="logout" class="org.apache.cxf.interceptor.loggingoutinterceptor" /> <bean id="saajin" class="org.apache.cxf.binding.soap.saaj.saajininterceptor" /> <bean id="wss4jin" class="org.apache.cxf.ws.security.wss4j.wss4jininterceptor"> <constructor-arg> <map> <entry key="action" value="usernametoken Timestamp" /> <entry key="passwordtype" value="passwordtext" /> </map> </constructor-arg> </bean> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 36 / 43

Securiser un WS : Configuration dans Spring TP/WS_CXF_Secure/src/java/applicationContext.xml <cxf:bus> <cxf:features> <cxf:logging /> </cxf:features> <cxf:properties> <entry key="ws-security.validate.token" value="false" /> <entry key="ws-security.ut.no-callbacks" value="true" /> <entry key="ws-security.ut.validator" value="test.utvalidator" /> </cxf:properties> <cxf:ininterceptors> <ref bean="login" /> </cxf:ininterceptors> <cxf:outinterceptors> <ref bean="logout" /> </cxf:outinterceptors> <cxf:infaultinterceptors> <ref bean="login" /> </cxf:infaultinterceptors> <cxf:outfaultinterceptors> <ref bean="logout" /> </cxf:outfaultinterceptors> </cxf:bus> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 37 / 43

Securiser un WS : Configuration dans Spring TP/WS_CXF_Secure/src/java/applicationContext.xml <!-- End points --> <jaxws:endpoint id="calculserviceendpoint" implementor="#calculservice" address="/icalculservice" > <jaxws:ininterceptors> <ref bean="saajin" /> <ref bean="wss4jin" /> </jaxws:ininterceptors> </jaxws:endpoint> <!-- Bean d acces --> <bean id="calculservice" class="service.calculservice" /> </beans> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 38 / 43

Securiser un WS : Implémentation du validateur TP/WS_CXF_Secure/src/java/test/UTValidator.java public class UTValidator extends UsernameTokenValidator { @Override protected void verifyplaintextpassword(usernametoken usernametoken, RequestData data) throws WSSecurityException { if (!usernametoken.getname().equalsignorecase("michael")!usernametoken.getpassword().equalsignorecase("mdp")) { throw new WSSecurityException(WSSecurityException.FAILED_AUTHENTICATION); } } } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 39 / 43

Sécuriser le client du WS Modifier la configuration de Spring intercepteurs TP/WS_CXF_Client_Secure/src/applicationContext.xml <!-- Interceptors --> <bean id="login" class="org.apache.cxf.interceptor.loggingininterceptor" /> <bean id="logout" class="org.apache.cxf.interceptor.loggingoutinterceptor" /> <bean id="saajout" class="org.apache.cxf.binding.soap.saaj.saajoutinterceptor" /> <bean id="wss4jout" class="org.apache.cxf.ws.security.wss4j.wss4joutinterceptor"> <constructor-arg> <map> <entry key="action" value="usernametoken Timestamp" /> <entry key="user" value="ws-client" /> <entry key="passwordtype" value="passwordtext" /> <entry key="passwordcallbackclass" value="test.pwcallbackhandler" /> </map> </constructor-arg> </bean> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 40 / 43

Sécuriser le client du WS Modifier la configuration de Spring bus <!-- The CXF Bus --> <cxf:bus> <cxf:features> <cxf:logging /> </cxf:features> <cxf:ininterceptors> <ref bean="login" /> </cxf:ininterceptors> <cxf:outinterceptors> <ref bean="logout" /> </cxf:outinterceptors> <cxf:infaultinterceptors> <ref bean="login" /> </cxf:infaultinterceptors> <cxf:outfaultinterceptors> <ref bean="logout" /> </cxf:outfaultinterceptors> </cxf:bus> TP/WS_CXF_Client_Secure/src/applicationContext.xml Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 41 / 43

Sécuriser le client du WS Modifier la configuration de Spring TP/WS_CXF_Client_Secure/src/applicationContext.xml <!-- Client Proxies --> <jaxws:client id="calcul" serviceclass="service.icalculservice" address="http://localhost:8080/ws_cxf_secure/icalculservice?wsdl"> <jaxws:outinterceptors> <ref bean="saajout" /> <ref bean="wss4jout" /> </jaxws:outinterceptors> </jaxws:client> </beans> Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 42 / 43

Sécuriser le client du WS Créer le callbackhandler login/mdp TP/WS_CXF_Client_Secure/src/test/PWCallbackHandler.java public class PWCallbackHandler implements CallbackHandler { @Override public void handle(callback[] callbacks) throws IOException, UnsupportedCallbackException { WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; pc.setidentifier("michael"); pc.setpassword("mdp"); } } Michael Fortier (Université Paris 13) WEBSERVICES M2I,LEE,2014-2015 43 / 43