Java Web Start

publicité
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)
 Présentation
 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
Processus de chargement
page.html +
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
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é)
Processus de déploiement
1 Demande
Descriptor.jnlp
2 Client JWS
demande
Application.jar
Descriptor.jnlp +
Application.jar
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
<?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>
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
Téléchargement