Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)

Dimension: px
Commencer à balayer dès la page:

Download "Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy)"

Transcription

1 Implementing a simple RMI Application over the Internet (using and comparing HTTP tunneling, RMI Proxy) Abstract Un problème se pose lorsque l on veut effectuer des appels RMI à travers un firewall, car souvent il empêche l accès à certains ports pour cause de sécurité. Une technique peut être le HTTP tunneling où les appels se font sous forme de requête HTTP à l aide d une servlet. Une deuxième technique expliquée dans ce document est le RMIProxy, dans laquel on place un proxy RMI pour chaque firewall, celui-ci effectue un contrôle pour ne laisser passer que les requête RMI, il permet aussi d ajouter d autres contraintes. Ce document permettra de se faire une idée sur ces deux concepts permettant aux requêtes RMI de traverser des firewall. Master Seminar Advanced Software Engineering Topics Prof. Jacques Pasquier-Rocha University of Fribourg, Switzerland Departement of Informatics Software Engineering Group Author : Fabien Pochon Supervisor : Patrik Fuhrer Jun 12, 2003

2 Table des matières 1. Introduction Problématique HTTP Tunneling Comment RMI «tunnelle» des messages Naming services and «the server machine» L implémentation d un servlet pour le HTTP tunneling Le code du servlet Modifications à apporter afin d utiliser le Tunneling Désavantages du HTTP tunneling Configuration du fichier policy Exemple d appel RMI utilisant HTTP tunneling RMIProxy Où trouve-t-on RMIProxy Les objectifs Les caractéristiques Le contrôle d accès L architecture Comment RMIProxy fonctionne L API coté client L API côté serveur Proxies multiple Limitations du RMI Proxy Activation Stubs cachés Socket Factories GetClientHost RMI / IIOP Stubs distants indirectes Les modifications à apporter au client et au serveur Les différences entre RMI Proxy et HTTP tunneling Conclusion Le RMI Proxy est certainement une méthode bien meilleur que le HTTP tunneling, car elle ne comporte que des avantages sur cette dernière. Malheureusement je n ai pas testée Annexes : Configurations Installation du seveur Apache Installation de Tomcat Configuration du serveur Apache Redirection du script CGI Bibliographie

3 1. Introduction RMI (Remote Method Invocation) est un système distribué, ce qui signifie que une ou plusieurs applications peuvent s exécuter sur une ou plusieurs machines. Une caractéristique d un système distribué est le besoin de collaboration entre les différents processus qui composent le système. Ce qui donne l illusion à l utilisateur qu il utilise une application locale, alors que des invocations de méthodes se font dans un autre processus qui peut être sur une machine différente. Il y a donc un échange d informations qui s effectue entre plusieurs machines à l aide du protocole RMI. Ceci peut s effectuer sans aucun problème lorsque il n y a aucun firewall entre les deux parties communiquant via RMI. Lorsque un firewall sépare le client d un serveur il y aura certainement un problème. C est ce problème et la solution pour le contourner qui va donc être traité plus en détail dans ce document. 2. Problématique Le problème principal qui intervient lorsqu un client veut effectuer un appel RMI sur une machine distante est effectivement le firewall qui peut y avoir entre les deux. En effet les firewalls interdisent souvent l accès à certains ports spécialisés comme ceux qu on désire utiliser lors d un appel RMI. Les firewalls sont capables de filtrer des paquets selon : Leur adresse source Leur adresse de destination Le port de destination Le protocole de niveau supérieur (exemple : TCP, UDP) utilisé Cependant les firewalls sont généralement incapables de prendre des décisions en fonction des données contenues dans ces paquets. C est pourquoi les techniques de tunneling, RMI Proxy ou encore d autres peuvent être utilisées. 3

4 3. HTTP Tunneling Le principe de base du http tunneling est d utiliser comme protocole de communication des appelles http à travers le Web pour des application qui ne se font pas par le Web. Le requête originale émise n est pas envoyé par un Web browser mais par une instance d une URLClassLoader, et la réponse n est pas une page html mais le code binaire d une classe. HTTP tunneling est utilisé pour deux raisons essentielles, qui sont les deux très pragmatiques. Premièrement il permet au développeur d applications d utiliser les composants et l infrastructure qui existe déjà pour les applications web, il est alors facile de définir un protocole utilisant ces composants. De plus il rend aussi facilement possible aux développeurs d applications d incorporer de multiples langages. Depuis que presque chaque langage moderne a sa librairie permettant de traiter et de générer du XML, utiliser HTTP et XML pour définir un protocole permet au client d être écrit dans un langage et le serveur dans un autre. La seconde raison d utiliser HTTP tunneling est qu il est possible pour des applications distribuées d éviter les firewalls. Pour comprendre pourquoi il suffit de regarger la figure 1. Figure 1 : HTTP tunneling en action (tirée de O Reilly, Java RMI) Le point clé dans cette architecture est que le client utilise une couche supplémentaire (marshalling layer) qui encode la requête du client en une requête HTTP valide. Le serveur de l autre coté possède aussi une couche supplémentaire (layer of demarshalling code), laquelle transforme une requête HTTP en une requête correspondant à celle attendue par le serveur. Le HTTP tunneling est divisé en trois parties : 4

5 Le client : Envoie une requête au serveur web Le servlet : Transmet la requête à la socket du serveur RMI en préservant la structure HTTP qui a été envoyée par le client Le serveur : Transforme automatiquement l envoi HTTP en une commande JRMP (Java Remote Method Invocation) 3.1 Comment RMI «tunnelle» des messages Maintenant le but du mécanisme de RMI HTTP tunneling devrait être clair : il encode un appel de méthode à distance à la façon d une requête HTTP POST, et ensuite décode la «page web» retournée en une réponse du type approprié. RMI accomplit ceci de la même manière en utilisant un type élaboré de socket, dans laquelle une sérialisation est faite pour générer aussi bien les requêtes que les réponses HTTP. Bien qu un différent mode de socket est utilisé, RMI va utiliser par défaut son propre mode de socket quand des connections seront créées. Les sockets par défauts retournées par RMI tentent d utiliser HTTP tunneling si auparavant elles ont reçu une erreur du serveur. Les sockets par défaut emploient la stratégie suivante quand elles tentent une invocation de méthode sur un serveur : 1. Tentent d établir une connexion JRMP directe vers le serveur. 2. Si la connexion échoue, elles tentent d établir une connexion HTTP directe avec le serveur. Ainsi elles créent une connexion par socket vers le port sur lequel le serveur est en train d écouter et ensuite communique en encapsulant les méthodes demandées dans des requêtes HTTP. La première chose que le «RMI demarshalling» effectue est de déterminer si la requête a été encodée en utilisant JRMP ou HTTP. 3. Si la requête échoue encore, elles tentent d utiliser le firewall comme un serveur proxy (demandant au firewall de transmettre la requête au port approprié du serveur). Le firewall transmettra la requête comme une requête HTTP (le firewall ne va pas traduire la requête en appel RMI). 4. Si il y a encore un échec, elles tentent de se connecter sur le port 80 de la machine serveur et lui envoie la requête selon un URL commençant avec /cgi-bin/java-rmi.cgi. Cet URL signifie que la requête doit être transmise vers un programme qui interprète les requêtes HTTP et qui la transmet, comme une requête HTTP, vers le port approprié du serveur. Cette façon de communiquer peut paraître plutôt complexe. Ces points sont classés dans l ordre décroissant de leur privilège. De plus ces points sont indépendants les uns des autres, il est possible d imaginer un scénario pour lequel le quatrième point soit l unique possibilité d établir une communication. Par exemple supposons qu un firewall ait été installé pour ne permettre qu uniquement les connexions HTTP vers un serveur et qu un serveur RMI soit derrière le firewall. Un client qui essaye de communiquer avec le serveur aura besoin 5

6 d utiliser une stratégie différente selon si il se trouve derrière le firewall (il se trouve dans un intranet) ou en dehors du firewall (il se situe n importe où ailleurs sur l Internet). Si il se trouve à l intérieur du firewall, la première stratégie de connexion (direct JRMP) sera disponible et aura donc un sens. Si le client est à l extérieur du firewall, il y aura deux options qui dépendront du «firewall policy». Si le firewall permet les connexions HTTP sur n importe quel port et n insiste pas sur un trafic sur le port 80, la seconde option d envoyer une information HTTP directement sur le port sur lequel le serveur écoute est plus efficace. Cependant si le firewall insiste sur le fait que tout trafic HTTP doit être envoyé sur le port 80, alors la quatrième option sera la seule façon d établir une connexion. 3.2 Naming services and «the server machine» Un point important, qui n a pas encore été traité est que «la machine serveur» dans la quatrième option est une abstraction, elle n est pas nécessairement sur la même machine que l objet serveur actuel. C est simplement un nom de machine stocké dans le stub. Ce niveau supplémentaire d indirection permet au HTTP tunneling d être implémenté de façon flexible. Prenons par exemples un firewall qui réduit toutes les connexions entrantes à être des requêtes HTTP sur le port 80. Si nous mettons le «naming service» à l extérieur du firewall et la valeur du java.rmi.server.hostname prend le nom du server web, alors la quatrième option devra être utilisée. De cette façon, RMI tentera d envoyer des messages à notre serveur en appelant un URL commançant par /cgi-bin/java-rmi.cgi. Ceci ne force pas le serveur RMI à fonctionner sur la même machine que le serveur web. Cela signifie simplement que nous avons besoin d écrire une classe servlet qui effectue l étape finale dans la redirection de la requête RMI et qui ensuite configure le serveur web afin qu il envoye toutes les requêtes avec l URL approprié au servlet. Figure 2 : Le cheminement des messages (tirée de O Reilly, Java RMI) 6

7 L architecture résultante ressemble au diagramme de la figure 2. Les nombres montrent le cheminement des messages. 3.3 L implémentation d un servlet pour le HTTP tunneling Pour le déroulement de la quatrième stratégie, il y a une manière de transmettre l invocation de méthode au serveur RMI. La première implémentation de cette méthode que Sun Microsystems, Inc. développa était un script CGI. Les points suivants sont requis : Chaque invocation distante de méthodes est envoyée comme une requête HTTP POST L URL complet utilisé est de la forme /cgi-bin/java-rmi.cgi?forward=[port number] Le corps du POST contient toutes les données de la requête distante comme un objet sérialisé qui est ensuite converti en une chaîne de caractères ASCII. Après que la spécification des servlets fut défini, Sun créa un servlet qui fournit les mêmes fonctionnalités que le script CGI Le code du servlet Le code du servlet développé consiste en deux classes principales et en une liste de classes d exceptions. Les deux classes principales sont SimplifiedServletHandler et ServletForwardCommand. Elles ont les rôles suivants : SimplifiedServletHandler : Cette classe étend HTTPServlet. Elles reçoit les requêtes et effectue un validation préliminaire. ServletForwardCommand : C est une liste de méthodes statiques qui sait comment interpréter un HTTP POST et renvoyer ceci au serveur RMI qui tourne sur la même machine. Le code de SimplifiedServletHandler : public class SimplifiedServletHandler extends HttpServlet { public void init(servletconfig config) throws ServletException { super.init(config); System.out.println("Simplified RMI Servlet Handler loaded sucessfully."); public void dopost(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { try { String querystring = req.getquerystring(); String command, param; 7

8 int delim = querystring.indexof("="); if (delim == -1) { command = querystring; param = ""; else { command = querystring.substring(0, delim); param = querystring.substring(delim + 1); if (command.equalsignorecase("forward")) { try { LoggingServletForwardCommand.execute(req, res, param); catch (ServletClientException e) { returnclienterror(res, "client error: " + e.getmessage()); e.printstacktrace(); catch (ServletServerException e) { returnservererror(res, "internal server error: " + e.getmessage()); e.printstacktrace(); else { returnclienterror(res, "invalid command: " + command); catch (Exception e) { returnservererror(res, "internal error: " + e.getmessage()); e.printstacktrace(); public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { returnclienterror(res, "GET Operation not supported: " + "Can only forward POST requests."); public void doput(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { returnclienterror(res, "PUT Operation not supported: " + "Can only forward POST requests."); public String getservletinfo() { return "RMI Call Forwarding Servlet Servlet.<br>\n"; private static void returnclienterror(httpservletresponse res, String message) throws IOException { res.senderror(httpservletresponse.sc_bad_request, "<HTML><HEAD>" + "<TITLE>Java RMI Client Error</TITLE>" + "</HEAD>" + "<BODY>" + "<H1>Java RMI Client Error</H1>" + message + "</BODY></HTML>"); System.err.println(HttpServletResponse.SC_BAD_REQUEST + "Java RMI Client Error" + message); private static void returnservererror(httpservletresponse res, String message) 8

9 throws IOException { res.senderror(httpservletresponse.sc_internal_server_error, "<HTML><HEAD>" + "<TITLE>Java RMI Server Error</TITLE>" + "</HEAD>" + "<BODY>" + "<H1>Java RMI Server Error</H1>" + message + "</BODY></HTML>"); System.err.println(HttpServletResponse.SC_INTERNAL_SERVER_ERROR + "Java RMI Server Error: " + message); Presque tout du processus logique de SimplifiedServletHandler est contenu à l intérieur de la méthode dopost(). La méthode dopost() parcourt l URL pour déterminer le port sur lequel le serveur écoute. Si l URL est un URL valide et contient le port, la requête est ensuite transmise à la méthode statique execute() du ServletForwardCommand. Le ServletForwardCommand comprends une série de méthodes statiques présentées ci-dessous : public class ServletForwardCommand { public static void execute(httpservletrequest request, HttpServletResponse response, String stringifiedport) throws ServletClientException, ServletServerException, IOException { int port = convertstringtoport(stringifiedport); Socket connectiontolocalserver = null; try { connectiontolocalserver = connecttolocalserver(port); forwardrequest(request, connectiontolocalserver); forwardresponse(response, connectiontolocalserver); finally { if (null!= connectiontolocalserver) { connectiontolocalserver.close(); private static int convertstringtoport(string stringfiedport) throws ServletClientException { int returnvalue; try { returnvalue = Integer.parseInt(stringfiedPort); catch (NumberFormatException e) { throw new ServletClientException("invalid port number: " + stringfiedport); if (returnvalue <= 0 returnvalue > 0xFFFF) { throw new ServletClientException("invalid port: " + returnvalue); if (returnvalue < 1024) { throw new ServletClientException("permission denied for port: " + returnvalue); 9

10 return returnvalue; private static Socket connecttolocalserver(int port) throws ServletServerException { Socket returnvalue; try { returnvalue = new Socket(InetAddress.getLocalHost(), port); catch (IOException e) { throw new ServletServerException("could not connect to " + "local port"); return returnvalue; private static void forwardrequest(httpservletrequest request, Socket connectiontolocalserver) throws IOException, ServletClientException, ServletServerException { byte buffer[]; DataInputStream clientin = new DataInputStream(request.getInputStream()); buffer = new byte[request.getcontentlength()]; try { clientin.readfully(buffer); catch (EOFException e) { throw new ServletClientException("unexpected EOF " + "reading request body"); catch (IOException e) { throw new ServletClientException("error reading request" + " body"); DataOutputStream socketout = null; // send to local server in HTTP try { socketout = new DataOutputStream(connectionToLocalServer.getOutputStream()); socketout.writebytes("post / HTTP/1.0\r\n"); socketout.writebytes("content-length: " + request.getcontentlength() + "\r\n\r\n"); socketout.write(buffer); socketout.flush(); catch (IOException e) { throw new ServletServerException("error writing to server"); private static void forwardresponse(httpservletresponse response, Socket connectiontolocalserver) throws IOException, ServletClientException, ServletServerException { byte[] buffer; DataInputStream socketin; try { socketin = new DataInputStream(connectionToLocalServer.getInputStream()); catch (IOException e) { throw new ServletServerException("error reading from " + "server"); String key = "Content-length:".toLowerCase(); boolean contentlengthfound = false; String line; int responsecontentlength = -1; 10

11 do { try { line = socketin.readline(); catch (IOException e) { throw new ServletServerException("error reading from server"); if (line == null) { throw new ServletServerException("unexpected EOF reading server response"); if (line.tolowercase().startswith(key)) { responsecontentlength = Integer.parseInt(line.substring(key.length()).trim()); contentlengthfound = true; while ((line.length()!= 0) && (line.charat(0)!= '\r') && (line.charat(0)!= '\n')); if (!contentlengthfound responsecontentlength < 0) throw new ServletServerException("missing or invalid content length in server response"); buffer = new byte[responsecontentlength]; try { socketin.readfully(buffer); catch (EOFException e) { throw new ServletServerException("unexpected EOF reading server response"); catch (IOException e) { throw new ServletServerException("error reading from server"); response.setstatus(httpservletresponse.sc_ok); response.setcontenttype("application/octet-stream"); response.setcontentlength(buffer.length); try { OutputStream out = response.getoutputstream(); out.write(buffer); out.flush(); catch (IOException e) { throw new ServletServerException("error writing response"); Il y a trois points importants à relever dans ServletForwardCommand. Premièrement, on utilise des sockets pour transmettre le corps du message HTTP au serveur RMI et ensuite des simples «pipes» que le serveur RMI retourne dans des sorties HttpServletResponse. Le second point important est que ServletForwarder transmet le message sans décoder les données ou comprendre le message. Même si le corps de la requête HTTP contient des instances de classes sérialisées, ServletForwarder n a pas besoin d avoir ces classes dans son classpath ou de traiter les instances sérialisées, il s occupe simplement de copier des bytes d un endroit vers un autre. 11

12 3.4 Modifications à apporter afin d utiliser le Tunneling La socket RMISocketFactory tentera par défaut automatiquement d utiliser le HTTP tunneling quand les autres connexions auront échouées. Il n y a pas besoin de changer ni le code du serveur ni le code du client, il suffit simplement d ajouter un ligne dans le code du client afin qu il puisse utiliser le HTTP tunneling. Cette ligne est la suivante : RMISocketFactory.setSocketFactory( new sun.rmi.transport.proxy.rmihttptocgisocketfactory()) ; 3.5 Désavantages du HTTP tunneling HTTP est souvent considéré comme une mauvaise idée à cause des quatres raisons suivantes : Sécurité Le HTTP tunneling évite délibérément un mécanisme de sécurité qui a été mis en place par une autre personne qui le jugeait nécessaire. L inefficacité de la bande passante RMI est déjà à la base un protocole gourmand, il encode beaucoup d informations dans chaque message de requête. Donc prendre le message RMI et l insérer dans un envoi HTTP utilisera une plus grande largeur de bande. L inefficacité de la connexion HTTP tunneling ne peut pas créer une connexion puis la laisser ouverte et la réutiliser, il devra créer une nouvelle socket pour chaque requête qu il effectuera. La fragilité de l application L application entière est vulnérable à des changements dans la configuration du firewall ou du la topologie du réseau. 3.6 Configuration du fichier policy Chaque servlet est obligatoirement exécutée sous le contrôle d un gestionnaire de sécurité (Security Manager). Celui-ci s interpose entre la servlet et les ressources du système afin d empêcher toutes tentatives d accès illégales aux ressources du client. Les permissions d accès sont définies par la politique de sécurité (Security Policy) installée sur le poste de travail. Lorsque aucune politique de sécurité n est définie explicitement sur le client, le gestionnaire utilise alors la politique par défaut qui s appelle le bac à sable (Sandbox). Le bac à sable interdit aux servlets tout accès (lecture et écriture) aux ressources de la machine locale. Quand une servlet tente d accéder à une ressource du système, le gestionnaire de sécurité vérifie si le code exécuté a la permission d accéder à cette ressource en 12

13 consultant la politique de sécurité. Si la permission est accordée, tout se passe normalement. Dans le cas contraire, une exception est levée. Les fichiers «.policy» servent à paramétrer la politique de sécurité du système local. Un fichier «.policy» contient un ensemble de répertoires auxquels sont attribués individuellement un ensemble de permissions. Avant de lancer le serveur web il est important de noter que dans Java 2 (jdk1.2 et versions ultérieures) les politiques de sécurité appliquées par la JVM ne permettent pas du téléchargement du code sans permission explicite. Pour cela nous avons besoin, du côté client comme du côté serveur d'un fichier de politique de sécurité qu'on nommera java.policy et contenant les lignes suivantes : permission java.net.socketpermission "*: ","connect,accept"; permission java.net.socketpermission "*:80", "connect"; Le fichier «.policy» utilisé pour pouvoir effectuer un HTTP tunneling doit contenir une ligne de plus chez le client afin de lui permettre l utilisation de la «RMISocketFactory». Cette ligne est la suivante : permission java.lang.runtimepermission "setfactory"; 3.7 Exemple d appel RMI utilisant HTTP tunneling Le serveur Apache, Tomcat et le serveur RMI tourne sur la même machine (ip : ) à l intérieur du firewall. Afin de pouvoir effectuer un appel RMI à travers le firewall nous devons nous connecter au serveur Apache depuis une machine extérieur au firewall. Si l on a à disposition uniquement une machine à l intérieur du réseau local, on peut utiliser comme illustré dans la figure 3 un programme s appelant VNC qui permet de prendre le contrôle d une machine distante (dans ce cas nous prendrons le contrôle d une machine à l extérieur du firewall). Déroulement des étapes : Le client fait un appel RMI au serveur sous forme de requête HTTP grâce au socket factory utilisé. Un message de la forme /cgi-bin/javarmi.cgi?forward=[port number] sera envoyé au serveur Apache (dans le cas présent le port 80 sera utilisé car c est celui qui est à disposition par le firewall). Dans un premier temps une servlet (fonctionnant sur le serveur grâce à Tomcat) contrôlera la syntaxe de ce message. Puis l enverra sous forme HTTP POST au serveur RMI. Le serveur RMI la traitera et enverra au serveur Apache une réponse de type HttpServletResponse. Le servlet transmettra cette réponse au client sous la forme d une réponse HTTP à l aide de la socket factory utilisée. 13

14 Figure 3 : Déroulement d un appel RMI utilisant HTTP tunneling 14

15 4. RMIProxy Une seconde technique permettant le passage des appels RMI à travers un firewall est la méthode RMIProxy. Dans cette technique le client doit être configuré afin de pouvoir utiliser des sockets qui traversent le firewall. 4.1 Où trouve-t-on RMIProxy La version d évaluation de RMIProxy peut être téléchargé sur le site 4.2 Les objectifs Les objectifs de RMI Proxy sont les suivants : 1. Eliminer les problèmes de sécurités de RMI à travers HTTP pour l administrateur réseau en fournissant des contrôles des exportations et des importations des services RMI, via une application firewall qui ne supporte uniquement le protocole RMI/JRMP. Aucune autre solution que RMIProxy existe. 2. Fournir une grande réduction des overhead dans le passage à travers un firewall comparé au HTTP tunneling. 3. Permettre un accès contrôlé vers le serveur RMI derrière le firewall. Aucune autre solution que RMIProxy existe. 4. Permettre un accès contrôlé des appels du côté client derrière un firewall. Aucune autre solution que RMIProxy existe. 5. Permettre au client RMI se trouvant derrière un firewall de contrôler l accès vers un serveur RMI de l autre côté du firewall. Les seules solutions existantes à ce problème sont les SOCKS et le HTTP tunneling. 6. Préserver toutes les propriétés de RMI. 7. Requérant un minimum de changement de code chez le client et le serveur RMI. 8. Reprendre le maximum d avantages existants dans les classes java, les packages, et la configuration et les dispositifs de sécurité. 4.3 Les caractéristiques RMI Proxy est une application Java et une API qui permet le contrôle de la pénétration dans un firewall en approuvant les clients et les serveurs RMI. 15

16 RMI Proxy fournit un protocole RMI intermédiaire qui remplace RMI/HTTP tunneling, avec un haut degré de contrôle d accès pour l administrateur réseau. RMI Proxy est capable de : bloquer l accès aux protocoles non-jrmp contrôler les écritures vers la RMI Proxy registry selon l identification de l hôte client. permettre ou refuser l accès et l exécution de méthodes distantes au client RMI, selon l identification de l hôte client. Permettre ou refuser le transfert de code par le service du codebase RMI, dans les deux directions. RMI Proxy fournit donc une grande réduction des overhead par rapport au HTTP tunneling. La durée de la connexion TCP est identique à une connexion RMI directe. L overhead découlant de tout RMI Proxy dans la chaîne de proxy est moindre qu une indirection RMI supplémentaire par proxy. RMI Proxy supporte entièrement : Les firewalls coté client Les firewalls coté serveur Les appels du client derrière le firewall client RMI Proxy préserve toutes les propriétés de RMI excepté l activation (les stubs activables sont séparés comme des stubs unicast), RMI/IIOP, et l exactitude des valeurs retournées par le RemoteServer.getClientHost. L utilisation de RMI Proxy nécessite uniquement un changement d utilisation de la classe Naming en ProxyNaming, et modifier les propriétés du rmi.proxyhost chez le client, le serveur et les proxy intermédiaires. RMI Proxy utilise le mécanisme Java de security-policy existant pour contrôler la configuration, et utilise la java.rmi.accessexception existante pour le rapport des erreurs. RMI Proxy est une solution 100% Java. Les composants firewall RMI Proxy implémentent une RMI registry standard. 4.4 Le contrôle d accès Le contrôle d accès est fournit par les fichiers Java policy, lesquels contrôlent la communication à travers les firewalls. Le contrôle d accès s effectuent selon l adresse IP ou le nom d un client voulant passé le firewall et selon l action que celui-ci veut effectuer, à l aide d une classe spéciale FirewallPermission. Le contrôle d accès est capable d être contre les actions suivantes : L accès à certains objets reçus ou envoyés implémentant l interface distant Bind, rebind ou unbind certains noms L exécution de certaines méthodes distantes Chercher certains noms dans la proxy registry 16

17 4.5 L architecture RMI Proxy comprend les composants importants suivants : 1. le programme RMI Proxy, lequel s exécute dans les proxy machines désignées 2. la classe ProxyNaming, une classe Naming modifiée, appelée par les clients et serveurs RMI. RMI Proxy comprend les sous-composants suivants : 1. Le Proxy Registry : une RMI Registry normale qui est soumise aux règles de contrôles d accès fournis par l implémentation du serveur RMIProxy. 2. Un protocole RMI qui négocie entre les flux descendants du serveur RMI et les flux montants du client RMI, effectuant la validation du protocole et le contrôle d accès dans le processus. Le système compte sur deux faits élémentaires de RMI : une référence distante peut seulement être obtenue par un paramètre ou le résultat d un appel de méthode distante, et la référence distante initiale est amorcée par un naming service (la RMI Registry). 4.6 Comment RMIProxy fonctionne Un serveur RMI derrière un firewall utilise le plus proche RMI Proxy afin d avoir son RMI Registry. Le coté extérieur du serveur RMI Proxy rend disponible un objet distant aux clients extérieurs. Pour le client RMI, une opération «lookup» sur un objet distant doit être dirigée vers le serveur proxy. Si le client est aussi lui-même derrière un firewall, le «lookup» est délégué à son RMI Proxy. La partie extérieure du proxy du client est capable de communiquer par RMI avec la partie extérieure du proxy serveur. Les proxies RMI servent d intermédiaires entre les entrées vers le serveur et les sorties du client. Ils effectuent la validation du protocole RMI et transmet les appels RMI de l un vers l autre. 17

18 Figure 4 : Exemple de configuration réseau RMI (tirée du guide de RMIProxy) Le RMI Proxy comprend trois composants : RMI proxy Registry un serveur RMI Proxying une API utilisée par les client et les serveurs Le RMI proxy Registry et les composants serveur sont installés en association avec chaque firewall qui existe entre le client RMI et le serveur RMI. Il peut y avoir un nombre quelconque de firewall. Chacun doit ouvrir son port au trafique RMI, lequel est ensuite manipulé d un manière sécurisée par le RMI proxy associé. La propriété système rmi.proxyhost, placée sur chaque hôte impliqué, dicte s il faut déléguer la requête du coté client (comme par exemple : lookup), ou s il faut la propager à la registry du coté serveur (par exemple : bind ou rebind), vers le prochain RMI Proxy dans la chaîne. Chaque RMI proxy a le droit de restreindre l accès à l aide d un fichier policy. Des Restrictions peuvent être imposées comme nous l avons vu plus haut par l adresse IP ou le nom de l hôte, par le nom du service distant, ou par l interface distant et les noms de méthodes. 4.7 L API coté client Quand un client RMI obtient une référence, il utilise normalement la méthode naming.lookup, avec un URL RMI de la forme : rmi://host/name où le host est le nom de l hôte sur lequel la RMI Registry tourne, et le name est le nom de l objet distant se trouvant dans la registry. 18

19 Dans l API de RMIProxy, le client utilise ProxyNaming à la place de Naming, Si un proxy est présent du coté client, les propriétés du système rmi.proxyhost spécifient son emplacement comme une URL RMI. Si cette propriété est présente, le client fonctionne dans un environnement RMI Proxy, donc le lookup est délégué au RMI Proxy, lequel est moins restrictif vers l extérieur que le client original. Si ce Proxy fonctionne avec un autre Proxy le lookup est redélégué et ainsi de suite jusqu au Proxy final atteint à l extérieur du firewall coté client, à ce point le Naming.lookup standard est exécuté, comme si aucun Proxy n avait été entre deux. Ce lookup, soit il réussi soit il échoue. Si il échoue, une exception RMI est propagé en retour vers le client original, et rien de remarquable se produit (l objet distant n a pas été trouvé). Si le lookup réussit, le stub obtenu (le flux descendant du stub) vérifie l accès au RMI Proxy. Cela peut encore échouer avec une java.rmi.accessexception ; autrement un stub se référant à l hôte RMI Proxy est retourné au client (le flux montant du stub). Le RMI Proxy maintient un lien entre le flux montant et descendant du stub, et transmet les appels RMI de l un à l autre, sujet du contrôle d accès. Du point de vue du client, l existence de RMI Proxy est invisible. Tout ce que le client sait, c est qu il a demandé un naming service (en utilisant ProxaNaming) pour une référence distante et qu il la obtenu ; le référence distante est du type expected, et le travail de la référence est de communiquer avec l objet distant. 4.8 L API côté serveur Un serveur RMI accessible par internet est lié avec la méthode ProxyNaming.bind à la place de Naming.bind ou Registry.bind, avec une URL RMI de la forme : rmi://host/name où host est le nom de l hôte sur lequel tourne la RMI Registry, et name est le nom de l objet distant dans cette registry. Avec les règles normales de RMI, un serveur RMI peut seulement être lié à un nom dans la RMI Registry par un processus tournant sur la même machine que la Registry. RMI Proxy modifie ces contraintes (le sujet du contrôle d accès pour le proxy). Les propriétés système rmi.proxhost nomment un hôte accessible où un RMI Proxy tourne. Si cette propriété est présente, la JVM tourne dans un environnement RMI Proxy, donc l opération ProxyNaming.bind est exécutée en même temps dans la registry locale et dans le RMI Proxy. Si il y a un autre proxy pour ce proxy, l opération est redéléguée et ainsi de suite jusqu à ce que le proxy final soit atteint. Dans l hôte original et dans chaque proxy incluant le dernier, le standard Naming.bind est exécuté par le ProxyNaming.bind. Ceci force le binding à se produire dans toutes les registry exécutées dans la chaîne des proxy. Le serveur est donc lié à la registry locale et aux registries de la chaîne des proxy. Une opération lookup de chaque proxy registries retourne un stub de flux montant se référant à un RMI Proxy, lequel transmet vers le stub de flux descendant après avoir effectué un contrôle d accès, exactement comme dans le cas de l API coté client, éventuellement en atteignant le serveur RMI original. 19

20 A l instar de l appel Naming.unbind ou Registry.unbind, un proxied RMI serveur est délié par ProxyNaming.unbind. Cette action d abord appelée Naming.unbind et ensuite délégué à la chaîne de proxy, entraîne unbinding de toutes les registries de la chaîne de proxy. De cette manière, chaque RMI serveur se lie vers une registry se trouvant dernière un ou plusieurs firewalls, et chaque serveur RMI accessible du serveur initial, sont rendus accessibles depuis internet, en étant rendus visibles par le plus proche RMI Proxy, et ainsi de suite récursivement. Un client RMI peut maintenant rechercher un serveur RMI à l extérieur du proxy côté serveur et obtenir un stub de flux descendant lequel finalement il se réfère, en passant par une chaîne de RMI Proxies, vers un serveur à l intérieur du firewall. Ce serveur n est donc pas directement accessible par le client. 4.9 Proxies multiple Si le client est derrière un ou plusieurs firewalls, ses propres RMI Proxies côté client feront leurs propre délégations, ainsi le client reçoit un stub qu il peut utiliser. Le dernier stub de flux montant pointe à l intérieur du proxy côté client, lequel pointe lui-même vers le suivant, lequel pointe éventuellement à l extérieur du proxy côté serveur, lequel pointe à l intérieur vers le suivant, lequel finalement point vers le serveur de flux descendant, comme illustré dans la figure 4. Figure 5 : multiples proxies côté client et serveur (tirée des «white paper» de RMIProxy) 20

Implementing a simple RMI Application over the. Internet. (using. and

Implementing a simple RMI Application over the. Internet. (using. and Implementing a simple RMI Application over the (using and Internet and comparing HTTP tunneling,, RMI Proxy) Plan de l exposé Introduction Problématique HTTP tunneling Comment RMI «tunnelle» des messages

Plus en détail

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe

Plus en détail

Partie 2.2: Servlet et Tomcat

Partie 2.2: Servlet et Tomcat Partie 2.2: Servlet et Tomcat 1 Plan du cours Servlets Présentation Exemple 2 Plan du cours Tomcat Des servlets à Tomcat: pourquoi Tomcat? Architecture Tomcat Installation et configuration de Tomcat Configuration

Plus en détail

Java Remote Method Invocation

Java Remote Method Invocation Java Remote Method Invocation Ce support est très largement inspiré du livre et du cours de S. Krakowiak S. Krakowiak Java Remote Method Invocation 1 / 25 Intérêt des objets pour la construction d applications

Plus en détail

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 7 : RMI

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 7 : RMI iut ORSAY DUT Informatique Département Informatique 2008 / 2009 Travaux Pratiques n o 7 : RMI Nom(s) : Groupe : Date : Objectifs : savoir créer des applications client-serveur mettant en jeu des machines

Plus en détail

RMI (Remote Method Invocation) Client serveur, situation traditionnelle. Client serveur, situation traditionnelle.

RMI (Remote Method Invocation) Client serveur, situation traditionnelle. Client serveur, situation traditionnelle. RMI (Remote Method Invocation) Présentation de RMI Université Française d Egypte Richard Grin Version 0.6 10/10/12 R. Grin RMI page 2 Client serveur, situation traditionnelle Sur la machine A un client

Plus en détail

Programmation orientée objet en langage JAVA

Programmation orientée objet en langage JAVA Programmation orientée objet en langage JAVA Java RMI : Techniques et utilisations avancées de RMI Claude Duvallet Université du Havre UFR Sciences et Techniques 25 rue Philippe Lebon - BP 540 76058 LE

Plus en détail

Java RMI. Programmation des applications réparties. Olivier Flauzac URCA. Master EEAMI-Informatique première année

Java RMI. Programmation des applications réparties. Olivier Flauzac URCA. Master EEAMI-Informatique première année Java RMI Programmation des applications réparties Olivier Flauzac URCA Master EEAMI-Informatique première année Olivier Flauzac (URCA) PAR : Java RMI MSTIC-INFO 1 1 / 30 1 RMI 2 Architecture 3 Développement

Plus en détail

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Module Client Serveur Web 2006 Cours, TD et TP sur PHP et Tomcat

Module Client Serveur Web 2006 Cours, TD et TP sur PHP et Tomcat Prénom : Module Client Serveur Web 2006 Cours, TD et TP sur PHP et Tomcat Nom : Merci de répondre aux questions fermées directement sur la présente feuille et aux questions ouvertes sur une feuille indépendante

Plus en détail

Systèmes Distribués Des protocoles client serveur au paradigme objets distribués avec Java

Systèmes Distribués Des protocoles client serveur au paradigme objets distribués avec Java Systèmes Distribués Des protocoles client serveur au paradigme objets distribués avec Java (application avec Java RMI) Éric Leclercq Département IEM / Laboratoire LE2i Décembre 2010 émail : Eric.Leclercq@u-bourgogne.fr

Plus en détail

Programmation servlet

Programmation servlet Programmation servlet Olivier Aubert 1/23 Références http://developer.java.sun.com/developer/onlinetraining/servlets/fundamenta http://www.servlets.com http://java.sun.com/products/jsp/index.html http://www.servletcentral.com/

Plus en détail

TD4 : Wikis, Servlets & Projet

TD4 : Wikis, Servlets & Projet Université Bordeaux 1 T.D. License 3 Informatique 2007 2008 TD4 : Wikis, Servlets & Projet L objet de cette séance est de vous familiariser avec les sockets et les servlets, et d introduire le projet.

Plus en détail

La plate-forme Java RMI

La plate-forme Java RMI La plate-forme Java RMI Frank Singhoff Bureau C-202 Université de Brest, France Lab-STICC/UMR 3192 singhoff@univ-brest.fr UE systèmes à objets répartis, Université de Brest Page 1/25 Sommaire 1. Le modèle

Plus en détail

Examen de Réseau Licence Licence GMI Maîtrise (Tous documents autorisés)

Examen de Réseau Licence Licence GMI Maîtrise (Tous documents autorisés) Examen de Réseau Licence Licence GMI Maîtrise (Tous documents autorisés) Contexte du sujet : Une entreprise spécialisée dans la production de matériel de mesure et d analyse météorologique propose des

Plus en détail

Systèmes distribués. Les Sockets

Systèmes distribués. Les Sockets Systèmes distribués Plusieurs technologies existent : Les sockets Les remote procedure call (RPC) Remote Method Invocation (RMI) Les Sockets L'utilisation des Sockets nécessite De gérer le codage et le

Plus en détail

Sensibilisation à RMI (Remote Method Invocation)

Sensibilisation à RMI (Remote Method Invocation) Jini Sensibilisation à RMI (Remote Method Invocation) Le rêve de tout système distribué L idéal serait d avoir un système distribué utilisant la technologie objet et permettant : 1) d invoquer une méthode

Plus en détail

Applications Web (Java)

Applications Web (Java) Applications Web (Java) Mohamed Quafafou 4A Polytech'Marseille mohamed.quafafou@univ-amu.fr 1 Servlets [Bases Exemples] 2 Java Servlets Java Servlet est une extension générique de serveur qui signifie

Plus en détail

Programmation par RPC et Java-RMI :

Programmation par RPC et Java-RMI : 2A-SI 3 Prog. réseau et systèmes distribués 3.2 et JavaRMI Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle Support de cours élaboré avec l aide de l équipe pédagogique du

Plus en détail

Programmation Réseau RMI. Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr. ! UFR Informatique

Programmation Réseau RMI. Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr. ! UFR Informatique Programmation Réseau RMI Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr UFR Informatique 2014 Les RMI de Java Les applications RMI sont des applications bâties sur

Plus en détail

Le réseau est l ordinateur

Le réseau est l ordinateur Le réseau est l ordinateur (Bill Joy) Les applets 1 Les applets : principe Les applets sont des programme Java téléchargés à partir d un serveur WEB et qui s exécutent dans le browser d un client : Fichier.html

Plus en détail

Web Tier : déploiement de servlets

Web Tier : déploiement de servlets Web Tier : déploiement de servlets 1 / 35 Plan 1 Introduction 2 Servlet : Principe de fonctionnement 3 Création et développement sur un serveur JEE 4 Quelques méthodes de l API des servlets 5 Utilisation

Plus en détail

Java Avancé - Cours 2

Java Avancé - Cours 2 Java avancé - cours 2 1/8 Java Avancé - Cours 2 Plan 1 Communication entre objets 1 1.1 Motivation....................................................... 1 1.2 Relations entre le panier et le rayon.........................................

Plus en détail

Implémentée sous forme de JavaBean ou EJB, c est dans cette couche que l on retrouve l ensemble des traitements d une application.

Implémentée sous forme de JavaBean ou EJB, c est dans cette couche que l on retrouve l ensemble des traitements d une application. Introduction Nous allons parler, dans ce document consacré aux architectures multi-tiers en environnement J2EE, de 3 des cinq couches les plus représentatives. Faisons tout d'abord un petit rappel sur

Plus en détail

PROGRAMMATION DISTRIBUÉE TUTORIEL RMI

PROGRAMMATION DISTRIBUÉE TUTORIEL RMI PROGRAMMATION DISTRIBUÉE TUTORIEL RMI PUBLIC CONCERNÉ : formation initiale, 2 e année. NOM DE L AUTEUR : V. Thomas DATE 2012/2013 UNIVERSITÉ DE LORRAINE IUT NANCY CHARLEMAGNE 2 ter boulevard Charlemagne

Plus en détail

SOA et Services Web. 23 octobre 2011. Evolution des Systèmes d Information

SOA et Services Web. 23 octobre 2011. Evolution des Systèmes d Information SOA et Services Web 23 octobre 2011 1 Evolution des Systèmes d Information 2 Qu est ce qu une application répartie? Il s agit d une application découpée en plusieurs unités Chaque unité peut être placée

Plus en détail

JVM. RMI - couche de référence. RMI - couche de transport TCP/IP

JVM. RMI - couche de référence. RMI - couche de transport TCP/IP Chapitre 9 Dans ce chapitre nous abordons le mécanisme RMI (Remote Method Invocation) permettant le développe ment des systèmes répartis. Nous expliquerons comment les classes d un serveur peuvent être

Plus en détail

TP Java RMI. Alexandre Denis Alexandre.Denis@inria.fr. Inria Bordeaux Sud-Ouest France ENSEIRB PG306

TP Java RMI. Alexandre Denis Alexandre.Denis@inria.fr. Inria Bordeaux Sud-Ouest France ENSEIRB PG306 TP Java RMI Alexandre Denis Alexandre.Denis@inria.fr Inria Bordeaux Sud-Ouest France ENSEIRB PG306 Paradigme RMI RMI (Remote Method Invocation) RPC orientés objet (encapsulation, héritage,...) objet :

Plus en détail

objectif : plan : Java, CORBA et RMI A. Le Grand,1997 1 JAVA, CORBA et RMI

objectif : plan : Java, CORBA et RMI A. Le Grand,1997 1 JAVA, CORBA et RMI JAVA, CORBA et RMI objectif : développer des applications client/serveur incluant des objets répartis Java / CORBA : client/serveur hétérogènes Java / RMI : client/serveur homogènes plan : l architecture

Plus en détail

Cours client-serveur Web : Java et RMI (Remote Method Invocation)

Cours client-serveur Web : Java et RMI (Remote Method Invocation) Cours client-serveur Web : Java et RMI (Remote Method Invocation) 1 Java: Rappel sur les threads Cycle de vie d un thread (1) Né -> prêt appel de la méthode start du thread Prêt Exécution Distribution

Plus en détail

Architecture Orientée Service, JSON et API REST

Architecture Orientée Service, JSON et API REST UPMC 3 février 2015 Précedemment, en LI328 Architecture générale du projet Programmation serveur Servlet/TOMCAT Aujourd hui Quelques mots sur les SOA API - REST Le format JSON API - REST et Servlet API

Plus en détail

RICM 4 ème année 12/1/2012

RICM 4 ème année 12/1/2012 RICM 4 ème année 12/1/2012 Examen de Systèmes Répartis Durée : 2h, Documents autorisés à l exception des livres. Le barème est indicatif. Partie A Applications Web Question 1. Dans un répertoire contenant

Plus en détail

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static Plan Environnement Client/Serveur Cours 6 Rappels Java (suite) Appel de méthode à distance kn@lri.fr http://www.lri.fr/~kn 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée

Plus en détail

Plan. Environnement Client/Serveur. Cours 7 JavaServer Pages (1) JSP. Programmation Web coté serveur

Plan. Environnement Client/Serveur. Cours 7 JavaServer Pages (1) JSP. Programmation Web coté serveur Plan Environnement Client/Serveur Cours 7 JavaServer Pages (1) kn@lri.fr 7.1 Principe 7.2 Rappels HTTP 7.3 Le serveur web Tomcat Programmation Web coté serveur JSP 2/28 (rappel) génération de pages-web

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr 1 Plan Principes généraux Modèle

Plus en détail

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples

Plus en détail

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

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java. Note technique W4 Engine Extension SSO Java Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java. 1 Présentation 3 2 Custom SSO Java 4 3 Bilan 10 Sommaire Référence

Plus en détail

file:///d:/wd/ens/in413/0708/les_tp/tp6_reseau/index.html TP6 Thèmes du TP : Serveurs de type "sessions"

file:///d:/wd/ens/in413/0708/les_tp/tp6_reseau/index.html TP6 Thèmes du TP : Serveurs de type sessions 1 sur 8 12/10/2007 15:50 TP6 Thèmes du TP : Serveurs de type "sessions" Architecture web et déploiement : une introduction httpunit : première utilisation Préambule : Les classes de tests unitaires présentes

Plus en détail

Programmation Socket en Java

Programmation Socket en Java Programmation Socket en Java Cours sockets Université Paul Sabatier Plan Un bon réflexe Les adresses IP en Java Sockets en mode flot La classe Socket La classe ServerSocket Communication via les Sockets

Plus en détail

Plan Rappels sur les patrons de conception Contexte Annuaire JNDI Conception d Applications Hétérogènes Distribuées

Plan Rappels sur les patrons de conception Contexte Annuaire JNDI Conception d Applications Hétérogènes Distribuées Conception d Applications Hétérogènes Distribuées Master 2 Traitement de l Information Lionel Médini Septembre-novembre 2015 du cours Outils de programmation avancés Retour sur les patrons de conception

Plus en détail

Systèmes répartis : Remote Method Invocation p.1/74

Systèmes répartis : Remote Method Invocation p.1/74 Systèmes répartis : Remote Method Invocation Fabrice Rossi http://apiacoa.org/contact.html. Université Paris-IX Dauphine Systèmes répartis : Remote Method Invocation p.1/74 Plan 1. Introduction 2. JRMP

Plus en détail

Serveurs réseau. 2011 Pearson Education France Java, mise à jour pour Java 7 Timothy Fisher

Serveurs réseau. 2011 Pearson Education France Java, mise à jour pour Java 7 Timothy Fisher 11 Serveurs réseau En pratique, il y a bien plus de chances que vous écriviez du code de client réseau que du code de serveur réseau. Toutefois, bon nombre d applications intègrent à la fois des fonctionnalités

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Projet M1 : Application P2P Hybride avec RMI

Projet M1 : Application P2P Hybride avec RMI Projet M1 : Application P2P Hybride avec RMI Applications Réparties 2008-2009 Université Paris VIII / Parcours SRM / M1 Sujet : Le but de ce projet est d'implémenter une application de partage de fichiers

Plus en détail

Bypass et filtre sur les requêtes destinées à la servlet W4

Bypass et filtre sur les requêtes destinées à la servlet W4 Note technique W4 Engine Bypass et filtre sur les requêtes destinées à la servlet W4 Cette note technique décrit le filtre de contrôle du bypass de la servlet W4. Versions de W4 Engine concernées : 5.0

Plus en détail

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant. http://robert.cireddu.free.

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant. http://robert.cireddu.free. 2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES 2.2 Architecture fonctionnelle d un système communicant Page:1/11 http://robert.cireddu.free.fr/sin LES DÉFENSES Objectifs du COURS : Ce cours traitera essentiellement

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr Remerciements Michel Riveill 1

Plus en détail

A. Architecture du serveur Tomcat 6

A. Architecture du serveur Tomcat 6 Administration du serveur A. Architecture du serveur Tomcat 6 La compréhension de l architecture interne du serveur Tomcat 6 est un pré-requis indispensable pour bien en maîtriser l administration et la

Plus en détail

Applications Web et servlets Java

Applications Web et servlets Java Département de génie logiciel et des TI LOG660 - Base de données haute performance Applications Web et servlets Java Application Web Une application Web répartie sur trois couches (three-tier Web application)

Plus en détail

RMI : Remote Method Invocation Appel de méthodes à distance

RMI : Remote Method Invocation Appel de méthodes à distance RMI : Remote Method Invocation Appel de méthodes à distance Patrice Torguet torguet@irit.fr Université Paul Sabatier Plan du cours l Les RPC l Architecture et fonctionnement de RMI l Etapes de développement

Plus en détail

Objets distribués et Appel de Méthodes à Distance 2009-2010

Objets distribués et Appel de Méthodes à Distance 2009-2010 Objets distribués et Appel de Méthodes à Distance 2009-2010 1 Objectif : construire une application où différents modules peuvent être situés sur des machines différentes, en utilisant un modèle à objets

Plus en détail

L3 informatique TP n o 2 : Les applications réseau

L3 informatique TP n o 2 : Les applications réseau L3 informatique TP n o 2 : Les applications réseau Sovanna Tan Septembre 2009 1/20 Sovanna Tan L3 informatique TP n o 2 : Les applications réseau Plan 1 Transfert de fichiers 2 Le Courrier électronique

Plus en détail

La programmation réseau. Java

La programmation réseau. Java Chapitre 7 : Java et les réseaux La programmation réseau Java Rémy Courdier 1996-2003 - Java Réseau - Version du cours 3.0 1 Sommaire La programmation réseau La classe URL Les Sockets TCP/IP et les principaux

Plus en détail

Applications Web. Cours 2: Introduction J2EE Servlets et JSP. Khaled Khelif

Applications Web. Cours 2: Introduction J2EE Servlets et JSP. Khaled Khelif Applications Web Cours 2: Introduction J2EE Servlets et JSP Khaled Khelif 1 Rappel Web statique vs. Web dynamique Principe des applications web Protocole HTTP : requêtes en mode texte Développement d applications

Plus en détail

arcopole Studio Annexe 7 Architectures Site du programme arcopole : www.arcopole.fr

arcopole Studio Annexe 7 Architectures Site du programme arcopole : www.arcopole.fr 4 arcopole Studio Annexe 7 Architectures Site du programme arcopole : www.arcopole.fr Auteur du document : Esri France Version de la documentation : 1.2 Date de dernière mise à jour : 26/02/2015 Sommaire

Plus en détail

1.1 Remote Procedure Call (RPC)

1.1 Remote Procedure Call (RPC) 1.1 Remote Procedure Call (RPC) Le modèle Client-Serveur est un modèle simple à utiliser pour la structuration des systèmes répartis. Mais ce modèle s appuie sur des communications de type entrée/sortie

Plus en détail

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar

Programmation - Java - Fiches du Langage. Marie Beurton-Aimar Programmation - Java - Fiches du Langage Marie Beurton-Aimar Fiche Numéro 1 1.1 Structure d un programme Java Toutes les instructions se terminent par un ; Le nom du fichier qui contient une classe doit

Plus en détail

NFP111 Systèmes et Applications Réparties

NFP111 Systèmes et Applications Réparties NFP111 Systèmes et Applications Réparties 1 de 38 NFP111 Systèmes et Applications Réparties Cours 11 - Les Enterprise Java Beans (Introduction aux Enterprise Claude Duvallet Université du Havre UFR Sciences

Plus en détail

Java et Objet. Amélie Lambert 2014-2015. Amélie Lambert 2014-2015 1 / 42

Java et Objet. Amélie Lambert 2014-2015. Amélie Lambert 2014-2015 1 / 42 Java et Objet Amélie Lambert 2014-2015 Amélie Lambert 2014-2015 1 / 42 Chapitre 8 Développement d applications Web Amélie Lambert 2014-2015 2 / 42 Plan du cours Typologie des applications Web Architecture

Plus en détail

Utilisation de ports différents Utilisation de plusieurs adresses IP Utilisation de «host header»

Utilisation de ports différents Utilisation de plusieurs adresses IP Utilisation de «host header» Les sites multiples Utilisation de ports différents Utilisation de plusieurs adresses IP Utilisation de «host header» L exploration de dossier (directory browsing) Dossiers réguliers (folders) vs dossiers

Plus en détail

Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions.

Exceptions. Fiabilité d un logiciel. Fiabilité en Java. Erreurs/exceptions. Localisation du traitement des erreurs/exceptions. Fiabilité d un logiciel Exceptions Université Française d Egypte Version O 5.7 5/10/15 Richard Grin Robustesse : fonctionne correctement, même en présence d événements exceptionnels Correction : donne

Plus en détail

Cours 1. Contenu du cours : " Premières applications. " Compilation, Exécution, Chemin. " Affichage et saisie. " Types de données. " Flux de contrôle

Cours 1. Contenu du cours :  Premières applications.  Compilation, Exécution, Chemin.  Affichage et saisie.  Types de données.  Flux de contrôle Cours 1 1 Contenu du cours : " Premières applications " Compilation, Exécution, Chemin " Affichage et saisie " Types de données " Flux de contrôle " Applets " Arrays " OO de base Edition Le fichier texte

Plus en détail

Technologies du Multimédia et du Web

Technologies du Multimédia et du Web 3 ème Année Licence appliquée Technologies du Multimédia et du Web MoezBEN HAJ HMIDA ISSAT Sousse 2009/2010 Plan Les systèmes e-services Évolution des architectures d applications Les architectures client/serveur

Plus en détail

Programmation Android TP7 - WebServices

Programmation Android TP7 - WebServices 1. WebService Dans le TP6, les avis étaient stockés dans une base SQL. Cette semaine les n-uplets sont stockés sur une base de données externe gérée par un serveur HTTP sur lequel tournent des scripts

Plus en détail

Application Web et J2EE

Application Web et J2EE Application Web et J2EE Servlet, JSP, Persistence, Méthodologie Pierre Gambarotto Département Informatique et Math appli ENSEEIHT Plan Introduction 1 Introduction Objectfis

Plus en détail

Servlets (fin) Accès aux paramètres. GET différend de POST GET : Paramètres dans l'url POST : Paramètres dans l'header

Servlets (fin) Accès aux paramètres. GET différend de POST GET : Paramètres dans l'url POST : Paramètres dans l'header Servlets (fin) Accès aux paramètres GET différend de POST GET : Paramètres dans l'url POST : Paramètres dans l'header Masqué par l'api Méthode getparameter(), getparametervalues() [page de forumulaire]

Plus en détail

Java - RMI Remote Method Invocation. Java - RMI

Java - RMI Remote Method Invocation. Java - RMI Remote Method Invocation Yann Viémont Université de Versailles St-Quentin Plan 1. Introduction 2. Rappels sur les RPC 3. Le modèle objet de Java-RMI 4. Architecture générale 1. Introduction = Disponible

Plus en détail

Les servlets Le langage Java Les Servlets XVII-1 JMF

Les servlets Le langage Java Les Servlets XVII-1 JMF Les Servlets XVII-1 servlet =? Une servlet est un programme (plug-in) à ajouter à un serveur (quel qu'il soit). Ce cours a trait à la programmation Java coté serveur (J2EE ) Pour l'instant les serveurs

Plus en détail

Tarak CHAARI Application Web en Java ISECS 2

Tarak CHAARI Application Web en Java ISECS 2 Programmation d Application Web avec Java Tarak CHAARI tarak.chaari@isecs.rnu.tn Université de Sfax, 2009-20102010 Tarak CHAARI Application Web en Java Version adaptée ISECS du cours de Mr Walid MAHDI

Plus en détail

Plan. Les pare-feux (Firewalls) Chapitre II. Introduction. Notions de base - Modèle de référence OSI : 7 couches. Introduction

Plan. Les pare-feux (Firewalls) Chapitre II. Introduction. Notions de base - Modèle de référence OSI : 7 couches. Introduction Plan Introduction Chapitre II Les pare-feux (Firewalls) Licence Appliquée en STIC L2 - option Sécurité des Réseaux Yacine DJEMAIEL ISET Com Notions de base relatives au réseau Définition d un pare-feu

Plus en détail

Ala Eddine BEN SALEM. T.P. 2 Servlet

Ala Eddine BEN SALEM. T.P. 2 Servlet EPITA Ala Eddine BEN SALEM App-Ing2 J2EE T.P. 2 Servlet 1. Création d'un projet Web: A l'aide d'eclipse, créer un nouveau projet «sampleservlet» avec comme environnement d'exécution le serveur Tomcat installé

Plus en détail

Web services en Java (services Web) Jean-marc Farinone

Web services en Java (services Web) Jean-marc Farinone Web services en Java (services Web) Jean-marc Farinone Web services (services web) : qu'est ce? Une architecture orientée objet et distribuée où les messages sont en syntaxe XML. Une définition : Les Services

Plus en détail

CONFIGURATION P 2 P 3 P 3 P 10 P 11 P 13 P 14 P 16

CONFIGURATION P 2 P 3 P 3 P 10 P 11 P 13 P 14 P 16 CONFIGURATION 1 Présentation 2 Topologie du projet 3 Installation 4 Configuration 4.1 Création de la DMZ publique 4.2 Accès vers l Internet 4.3 Publication d Exchange 4.4 Rapports d activité et alertes

Plus en détail

Systèmes répartis : les Remote Procedure Calls p.1/25

Systèmes répartis : les Remote Procedure Calls p.1/25 Systèmes répartis : les Remote Procedure Calls Fabrice Rossi http://apiacoa.org/contact.html. Université Paris-IX Dauphine Systèmes répartis : les Remote Procedure Calls p.1/25 Les Remote Procedure Calls

Plus en détail

Apache Tomcat 8 Guide d'administration du serveur Java EE 7 sous Windows et Linux

Apache Tomcat 8 Guide d'administration du serveur Java EE 7 sous Windows et Linux Avant-propos 1. À qui s adresse ce livre? 11 2. Les pré-requis 12 Préambule 1. Rappel sur les architectures Internet/Intranet/Extranet 13 1.1 Le protocole HTTP 14 1.1.1 Les méthodes HTTP 16 1.1.2 Les codes

Plus en détail

Architecture Web Comment mettre en place un frontal à un serveur d'application ( Formation UNR Arras - 24/11/2004 )

Architecture Web Comment mettre en place un frontal à un serveur d'application ( Formation UNR Arras - 24/11/2004 ) Architecture Web Ou Comment mettre en place un frontal à un serveur d'application ( Formation UNR Arras - 24/11/2004 ) Fareneau F. 1 Avertissement Ni l'auteur, ni les éditeurs, ni tout autre personne ayant

Plus en détail

1 Introduction à Apache Maven

1 Introduction à Apache Maven IUT Bordeaux 1 - Département Informatique Semestre 4 JEE 20112012 TP JEE (0) Introduction à MAVEN 1 Introduction à Apache Maven Les projets Java (surtout JEE) ont la particularité de dépendre de beaucoup

Plus en détail

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.

Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs. Apache, Mod_proxy et 4D Par Timothy PENNER, Technical Services Team Member, 4D Inc. Note technique 4D-201003-05-FR Version 1 - Date 1 mars 2010 Résumé Cette note technique porte sur l utilisation du serveur

Plus en détail

1. La plate-forme LAMP

1. La plate-forme LAMP Servi ces pour intranet et Internet Ubuntu Linux - Création et gestion d un réseau local d entreprise 1. La plate-forme LAMP Services pour intranet et Internet La fourniture d'un site pour le réseau ou

Plus en détail

Mettre en place un accès sécurisé à travers Internet

Mettre en place un accès sécurisé à travers Internet Mettre en place un accès sécurisé à travers Internet Dans cette partie vous verrez comment configurer votre serveur en tant que serveur d accès distant. Dans un premier temps, les méthodes pour configurer

Plus en détail

Pages Web dynamiques et bases de données

Pages Web dynamiques et bases de données Cours 2 Pages Web dynamiques et bases de données Une page Web dynamique est générée automatiquement grâce à l exécution d un script (PHP par exemple). C est le résultat de l exécution de ce script (code

Plus en détail

Création d un WebService. Tp WinDev Numéro 13

Création d un WebService. Tp WinDev Numéro 13 Tp WinDev Numéro 13 Objectifs : Création d un WebService Paramétrage d un serveur Web, Création du Service Web, Création du client consommateur, Approche XML, SOAP Outils : Un serveur d application Ce

Plus en détail

Gestion du Serveur Web

Gestion du Serveur Web Gestion du Serveur Web Console de gestion du Serveur Web Une console de gestion est disponible dans l'outil de l'administrateur. Cette console de gestion vous permet de configurer les services JetClouding

Plus en détail

Projet réseau : un «petit» client ftp

Projet réseau : un «petit» client ftp Projet 2005-2006 Client FTP Manuel Technique Projet réseau : un «petit» client ftp Maquaire Myriam Jilibert Laurent L3 GMI Resp : Mr Guesnet Sommaire 1) Aperçu du protocole FTP. 3 2) Historique... 4 3)

Plus en détail

AP-5 TD n 2 J2EE 5 novembre 2013

AP-5 TD n 2 J2EE 5 novembre 2013 Objectifs Prérequis Gestion des informations temporaires, sessions et cookies JSP et servlets, mise en place d un contrôleur Java Runtime Environnement (http://www.java.com/fr/download/) (JRE Java 7) IDE

Plus en détail

CORBA avec OpenORB. Samir Torki et Patrice Torguet

CORBA avec OpenORB. Samir Torki et Patrice Torguet CORBA avec OpenORB Samir Torki et Patrice Torguet 1 Présentation de CORBA CORBA (Common Object Request Broker Architecture) est un standard décrivant une architecture pour la mise en place d objets distribués.

Plus en détail

Mise en place d un reverse proxy

Mise en place d un reverse proxy Mise en place d un reverse proxy Certaines adresses IP ont été effacées dans ce document pour des raisons évidentes de sécurité. 1 Table des matières Utilisation des noms DNS pour atteindre les applications

Plus en détail

L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni :

L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni : TP n 9 Xml/Json 1) Exemple d application analysant un fichier XML L exemple qui est mis à votre disposition a pour but de rechercher les données contenues dans un fichier services.xml fourni : Ce fichier

Plus en détail

LOSLIER Mathieu IR1 31 Mai 2011. Rapport TP Firewall

LOSLIER Mathieu IR1 31 Mai 2011. Rapport TP Firewall Rapport TP Firewall 1 Table des matières Rapport TP Firewall... 1 Introduction... 3 1. Plate-forme de sécurité étudiée... 3 2. Routage classique... 3 2.1 Mise en œuvre du routage classique... 4 2.2 Configuration

Plus en détail

CEG3585/CEG3555 Tutorat 2. Été 2015

CEG3585/CEG3555 Tutorat 2. Été 2015 CEG3585/CEG3555 Tutorat 2 Été 2015 Architecture TCP/IP Les applications sont développées avec le socket API (en Java les classes Socket et ServerSocket) Adresse socket: Port TCP Adresse IP Les deux adresses

Plus en détail

Bénéfices de Citrix NetScaler pour les architectures Citrix

Bénéfices de Citrix NetScaler pour les architectures Citrix Bénéfices de Citrix NetScaler pour les architectures Citrix 15 novembre 2007 Auteurs: Mahmoud EL GHOMARI E-mail: mahmoud.elghomari@eu.citrix.com Stéphane CAUNES E-mail: stephane.caunes@eu.citrix.com Riad

Plus en détail

Les Systèmes et Applications Réparties et leur Programmation

Les Systèmes et Applications Réparties et leur Programmation Les Systèmes et Applications Réparties et leur Programmation Samia Bouzefrane Maître de Conférences Laboratoire CEDRIC Conservatoire National des Arts et Métiers 292 rue Saint Martin 75141 Paris Cédex

Plus en détail

TP1. Outils Java Eléments de correction

TP1. Outils Java Eléments de correction c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par

Plus en détail

TP 3 Programmation client/serveur

TP 3 Programmation client/serveur PhL - 20/03/2007 - Page 1 / 5 TP 3 Programmation client/serveur 1. Modèle de programmation 1. Introduction Au-dessus des protocoles de transmission, on peut construire des applications réparties reposant

Plus en détail

Introduction. Licence MASS L3 Inf f3

Introduction. Licence MASS L3 Inf f3 Le modèle client serveur Introduction Licence MASS L3 Inf f3 Encapsulation : rappel Données Données Application En-tête En-tête Transport UDP Données TCP Données Paquet UDP Segment TCP En-tête IP Données

Plus en détail

CHAPITRE 1. Introduction aux web services. 1.1 Définition. Contenu du chapitre : Env. De dev. Langage Visual Studio Java EE Qt Creator C#

CHAPITRE 1. Introduction aux web services. 1.1 Définition. Contenu du chapitre : Env. De dev. Langage Visual Studio Java EE Qt Creator C# CHAPITRE 1 Introduction aux web services Contenu du chapitre : Env. De dev. Langage Visual Studio Java EE Qt Creator C# NetBeans JavaScript Eclipse Objective C Xcode PHP HTML Objectifs du chapitre : Ce

Plus en détail

2 Chapitre 1 Introduction

2 Chapitre 1 Introduction 1 Introduction Ce livre présente les Enterprise JavaBeans 2.0 et 1.1 qui constituent la troisième et la deuxième version de la spécification des Enterprise JavaBeans. Tout comme la plate-forme Java a révolutionné

Plus en détail

Plugin Payment-OnLine

Plugin Payment-OnLine Plugin Payment-OnLine Le plugin "Payment-Online" est un plugin technique dont l'objectif est de faciliter l'utilisation du paiement en ligne dans des applications Lutèce. Il se compose d'une librairie

Plus en détail

Les architectures N-tiers

Les architectures N-tiers Les architectures N-tiers 1 SOMMAIRE DU COURS XML ET LES ARCHITECTURES N-TIER Introduction aux architectures N-tier Serveurs d applications Déploiement d applications J2EE Tiers applicatif : servlets Tiers

Plus en détail

Introduction ASP.NET

Introduction ASP.NET 1 Sommaire Introduction... 1 1 Framework... 2 1.1 Général (.NET)... 2 1.2 ASP.NET... 2 2 Prérequis... 2 3 Présentation des bases d un projet ASP.NET... 3 3.1 Création d un projet... 3 3.2 Site Web : Les

Plus en détail