Applettes et Java Web Start Exposé technique du 2 déc. 2008 Applettes et Java Web Start Délégation et déploiement R. M. Ingénieurs 2000 IR3
Sommaire Les applettes Présentation Créer et exécuter une applette La sécurité des applettes Les droits et les interdictions. Lever ces interdictions. Java Web Start (JWS) Déployer une application ok La sécurité
Les Applettes, c’est quoi ? Programme Java qui s’intègre dans une page Web. Interactivité. Graphique animé, lecteur vidéo, etc. Exécution du code côté client. Répartition de charge Multiplateforme et « multinavigateur ». Principale concurrent : Flash
3 – Exécution de Applet.class Processus de chargement 1- Demande page.html 2- Demande Applet.class page.html + Applet.class 3 – Exécution de Applet.class L’applette est chargée depuis un serveur puis exécutée sur le poste client.
Comment lire une Applette ? Pour l’insérer dans une page Web <OBJECT> (valide W3C) <APPLET> (préconisée par SUN) Pour l’exécuter Un navigateur AppletViewer (JDK) appletviewer http://.../MonApplet.html Toutes les applettes de la page sont exécutées
La balise <applet> <applet codebase= " http://localhost:8080/Projet/" code="MonApplet.class" archive="archive1.jar, archive2.jar" name="A1" width="200" height="200"> <param name="arg1" value="value1" /> <param name="arg2" value="value2" /> </applet>
Comment créer une applette ? public class MyFirstApplet extends Applet { @Override public void init() {…} @Override public void start() {…} @Override public void stop() {…} @Override public void destroy() {…} @Override public void paint() {…} } Cycle de vie AppletViewer : init() start() stop() destroy() Navigateurs récents: init()+start() stop()+destroy()
Différents dialogues possibles (1/2) Entre applets d’une même page getAppletContext().getApplet("A1"). javaMethod() De JavaScript à une applet document.applets[‘A1'].javaMethod() Des applets à JavaScript Ajouter l’attribut mayscript="true" Importer plugin.jar (JRE) new JSObject.call("javascriptMethod")
Différents dialogues possibles (2/2) Avec le serveur qui héberge l’applette URLConnection con = new URL(getCodeBase(), «ServletName »).openConnection() OutputStream stream = con.getOutputStream()
Sécurité des applettes La SandBox Protéger le client Pas d’accès aux fichiers, périphériques et au réseau du client. Lève SecurityException Accès non restreint ? Modifier les politiques de sécurité du client Signer numériquement l’application.
Les politiques de sécurité Etendre les droits Un fichier côté client grant codeBase "http://localhost:8080/AppletServlet/MstscNS.jar" { permission java.io.FilePermission "c:\\windows\\system32\\mstsc.exe", "execute"; }; A éditer à la main ou avec policytool (JRE). Prendre en compte la nouvelle politique appletviewer –H-Djava.security.policy=« mypolicy » http://.../file.html La placer dans {USER.HOME}/.java.policy
Lever les interdictions Signature numérique Lever les interdictions Archiver l’application Créer un certificat keytool -genkey -keystore myKeystore.ks -alias mykey Signer l’archive jarsigner –keystore myKeystore.ks myappli.jar mykey
Conclusion Avantages Technologie mature S’intègre facilement S’affranchir des limitations de HTML Bibliothèques Java consistantes Les applettes ne sont pas mortes Java FX
Java Web Start : Présentation Déploiement d’applications ou d’applettes Java Téléchargement des données. Installation / Exécution / Désinstallation Intégration Mises à jour automatiques A l’initiative du client. Différent de System Management Server Equivalent à ClickOnce
Avantages Java Web Start La portabilité La maintenance La sécurité Les optimisations Mises à jour des fichiers anciens seulement (jardiff) Seules les ressources utilisées sont téléchargées Mises en cache (exécution hors ligne, lancement accéléré)
1 Demande Descriptor.jnlp 2 Client JWS demande Application.jar Processus de déploiement 1 Demande Descriptor.jnlp 2 Client JWS demande Application.jar Descriptor.jnlp + Application.jar 3 Installation / MAJ 4 Exécution L’application est téléchargée, installée puis exécutée sur le poste client
Déployer une application Aucune modification du code n’est nécessaire. Archiver l’application Créer fichier de lancement au format JNLP Ajouter le type MIME « application/x-java-jnlp-file jnlp ». Au niveau du serveur Web (Apache : fichier « mime.types ») Placer les archives + JNLP sur le serveur Web
Le fichier JNLP Structure <jnlp spec="6.0+" <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE jnlp PUBLIC « -//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0//EN" « http://java.sun.com/dtd/JNLP-6.0.dtd"> <jnlp spec="6.0+" codebase="http://localhost:8080/TestJWS"> <information>(...) </information> <security> (...) </security> <resources> (...) </resources> <application-desc> (...) </application-desc> <applet-desc> (...) </applet-desc> </jnlp>
Le fichier JNLP Information <information> <title>Nom de l’application</title> <shortcut><desktop /></shortcut> <homepage href="http://.../expose.html"/> <description> (…) </description> <icon kind="splash" href="img/ig2k_logo.png" /> <offline-allowed/> </information>
Sécurité, Update et Resources Le fichier JNLP Sécurité, Update et Resources <security> <all-permissions /> </security> <update check=“always" policy="prompt-update"/> <resources> <java version="1.6+" max-heap-size="64m"/> <jar href="Mstsc_version_JWS.jar" main="true" download="eager"/> </resources>
Le fichier JNLP Application <application-desc main-class="MaClassePrincipale"> <argument>arg1</argument> <argument>arg2</argument> </application-desc> Ou bien … <applet-desc main-class="MonApplet" name="test" width="320" height="240"> <param name="key1" value="value1" /> <param name="key2" value="value2" /> </applet-desc>
Lancer une application Java Web Start Pré-requis : Client JWS (inclus dans les JRE 1.4+) Avant installation Depuis un navigateur Web <a href=« AppliDescriptor.jnlp»>Start Appli</a> En ligne de commande javaws HTTP://.../AppliDescriptor.jnlp Après installation À partir d’un gestionnaire d’applications À partir d’un raccourci créé sur le bureau
Lancer une application Java Web Start Le gestionnaire d’applications javaws -viewer
Java Web Start : Sécurité Identique aux applettes Exécution dans la SandBox Etendre les droits Mêmes solutions : Modifier les politiques de sécurité Signer numériquement les archives Nouvelle solution : l’API JNLP
Java Web Start : Sécurité L’API JNLP (1/2) Etendre les droits sans signature numérique Librairie nécessaire « javaws.jar » (JRE) Fournit 11 services dont : PrintService : accès à l’imprimante FileOpenService/FileSaveService : accès aux fichiers en lecture / écriture Etc.
Java Web Start : Sécurité L’API JNLP (2/2) FileOpenService fos = (FileOpenService) ServiceManager .lookup("javax.jnlp.FileOpenService"); FileContents[] fcs = fos.openMultiFileDialog(null, null); for (FileContents file : fcs) System.out.println(file.getName()); // lecture possible
Conclusion Facile à mettre en place Technologies complémentaires Migration d’une applette en application desktop Solutions gratuites !
Merci de votre attention. Questions ? R. M. Ingénieurs 2000 IR3