La sécurité des webservices REST

Ce billet fait suite à celui intitulé "Exemple de webservice rest avec jersey". En fait, la procédure montrée ici est valable pour tous les webservices. Elle n'est pas propre à ceux qui utilisent l'API Jersey.

La première chose à prendre en compte pour la sécurité est d'utiliser HTTPS pour crypter les communications de bout en bout.

Exemple de Webservice Rest avec Jersey

Nous allons ici développer un webservice REST avec l'api Jersey. Le serveur est Tomcat. Le service proposé est de fournir simplement une citation. Le but est de montrer les éléments nécessaires pour faire un webservice rest avec Jersey.

Web Service REST

REpresentational State Transfer.

REST est un style d'architecture de services web qui utilise les standards Web déjà très utilisés (plus spécifiquement HTTP). Cependant REST il peut s'appliquer à d'autres médias que le WEB.
REST n'utilise pas SOAP, WSDL ou UDDI, et parfois même pas XML. Mais il utilise des conventions inspirés de HTTP.

La sécurité des Web Services SOAP

Il y a deux types de besoins de sécurité.
  • Les besoins liés aux spécifications de l'application et au niveau de sensibilité du ou des services exposés. On parle ici de sécurité fonctionnelle.
  • Les besoins liés aux technologies employées, à leur degré de vulnérabilité face aux menaces. On parle ici de sécurité technique.

Web Service - Top-down et Bottom-up développement

Le développement top-down consiste à créer un fichier WSDL, puis la création du service Web à l'aide du fichier WSDL. Avec cette approche, on conçoit d'abord l'implémentation du service web que l'on défini dans un fichier WSDL. Ensuite, on créé le squelette des classes java à partir du WSDL, et on y ajoute le code nécessaire.

Avec l'approche bottom-up, on créé d'abord les classes du service web, ensuite on créé le fichier WSDL à partir ce ces classes.

WSDL

Le WSDL (Web Services Description Language) est une grammaire XML permettant de décrire un Web Service. C'est un fichier que l'on pourrait comparer à une pièce d'identité, ou une interface Java, mais écrite en XML.
 Il sert à décrire :
  • le format de messages requis pour communiquer avec ce service
  • les méthodes que le client peut invoquer
  • la localisation du service
  • le protocole de communication (SOAP RPC ou SOAP orienté message)

Questions sur JSF

Sur quel Design Pattern s'appuit principalement JSF ?
  1. Factory
  2. MVC
  3. Oberserver
  4. Composite

Quel tag peut contenir d'autres tags ?
  1. <f:view>
  2. <h:jsf>
  3. <h:view>
  4. <f:faces>

GIT : commandes de base



Utilisation basique

Gérer les dépôts



Avant de commencer à utiliser Git, il faut lui demander de créer un nouveau dépôt.


$ mkdir nom_depot
$ cd nom_depot
$ git init

Questions sur les web services

Au sujet de JAXB, quelle affirmation n'est pas correcte ?
  1. C'est un framework qui permet d'associer un modèle objet écrit en Java, à un modèle objet écrit en XML.
  2. Il peut générer un jeu de classes Java à partir d'un schéma XSD. Il peut aussi générer un schéma XSD à partir d'un jeu de classes.
  3. Il n'est pas employé par un web service REST.
  4. Le passage d'un objet Java à un document XML porte le nom de marshalling , et la transformation inverse s'appelle l' unmarshalling .



Questions sur les Design Patterns

Qu’est-ce qu’un anti-pattern ?
  1. C’est un design pattern qui évite les problèmes de dépendance.
  2. C’est une architecture qui ne s'appuie pas sur les design patterns.
  3. C’est un design pattern qui ne fait pas partie des 23 Design Patterns du Gang of Four (GoF).
  4. C’est une erreur courante de conception.

Questions UML

Lequel n'est pas un diagramme UML ?
  1. Diagramme des paquetages
  2. Diagramme de composants
  3. Diagramme de structure composite
  4. Diagramme d'instances.

Questions Java core

Qu’est-ce que JMX ?
  1. Java Messaging eXtended : C’est une API qui permet d’envoyer des messages via SMTP.
  2. C’est une API pour permettre un dialogue standard entre des applications ou des composants via des brokers de messages.
  3. JMX (Java Management Extensions) est une spécification qui définit une architecture, une API et des services pour permettre de surveiller et de gérer des ressources en Java.
  4. C’est une API pour permettre un dialogue asynchrone entre des applications ou des composants via des brokers de messages.

Questions sur les exceptions Java

Lorsqu’une exception est levée, que se passe-t-il ?
  1. La Java machine stoppe l'exécution normale du programme à la recherche d'un gestionnaire d'exception susceptible d'intercepter et traiter cette exception. Cette recherche s'effectue  à partir du bloc englobant et se poursuit sur les blocs plus englobants si aucun gestionnaire de cette exception n'a été trouvé.
  2. La JVM termine l’exécution du programme et rend la main au système.
  3. Si le code qui a causé l’exception n’est pas dans un bloc try/catch l’exécution du programme s’arrête.
  4. Si une exception hérite de la class java.lang.Error, le programme s’arrête, même si l’exception est gérée.

Questions JPA, Hibernate

Au sujet save() et saveOrUpdate(), quelle est la bonne affirmation ?
  1. Avec save() on n’utilise pas de transaction.
  2. Save() est une méthode de l’objet Session, alors que saveOrUpdate() est une méthode de l’object Transaction.
  3. Save() insert un enregistrement en table. SaveOrUpdate met à jours un enregistrement. S’il ne le trouve pas, il l’insert.
  4. SaveOrUpdate() et Save() ne nécessite pas d’être dans un bloc de traitement d'erreur.

Présentation de Mockito

A quoi sert un mock ?


  • Comment tester une méthode qui ne retourne rien ?
  • Comment tester une méthode qui interagit avec un autre objet ?


Avec les tests unitaires, nous voulons tester une méthode, mais pas ses dépendances.


Il faut donc faire croire à l’objet que l’on veut tester qu’il va utiliser les objet qu’il doit normalement instancier.

Mockito va donc nous aider à créer des “bouchons” (mock objects) qui vont simuler les objets réels

Présentation de Spring Roo


Spring Roo est un outil de Développement Rapide d’Application (RAD). Grâce à quelques instructions en ligne de commande on peut créer une web application Spring, ajouter et configurer des composants à toutes les couches de l’architecture de l’application.


  • Pour la couche de persistance, Roo nous laisse choisir la base de données, l’ORM à utiliser (Hibernate par exemple).
  • Il crée et gère les objets entités grâce à JPA.
  • Pour la couche de présentation, on choisit entre une interface web basée sur Spring MVC, GWT ou JSF.
  • Roo gère automatiquement  le logging et les tests grâce à JUnit et Selenium.