Image
applets signées dans vos pages web - Blog Eurelis
12/12 2010
Thème
Technologie

Des applets signées dans vos pages web...

Paragraphe

Texte

Les bases pour créer et utiliser efficacement des applets dans vos pages web.

Titre
Qu'est-ce qu'une applet ?

Texte

C'est un programme Java destiné à être téléchargé et exécuté par le navigateur de l'internaute.
Intérêts

  • Accès à l'ordinateur de l'internaute
  • Pas besoin d'un serveur Java
  • Appel direct depuis JavaScript sans forcément afficher l'applet
    • Présentation en HTML / CSS / JavaScript
    • Intelligence métier en Java

Inconvénients

  • Exécution sur le poste client
    • temps de téléchargement avant exécution
    • lenteur d'exécution
    • le plugin Java doit être installé
    • Pas indexé par Google

Titre
Construction

Texte

Une applet est une classe dérivant de java.applet.Applet

Cette classe dérivant de java.awt.Panel, on peut afficher l'applet grâce à AWT ou Swing:
public class MyApplet extends Applet {
public void paint(Graphics g) {
setLayout(new BorderLayout());
add(new JLabel("Hello World"), BorderLayout.NORTH);
}
}
 

Mais ce code étant long et compliqué à mettre en place, on peut appeler les méthodes Java depuis le javascript et looker la page en HTML/CSS:

Code Java :
public class MyApplet extends Applet {
public boolean createFile(String filename, String content) {
...
}
}

Code Javascript :
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {id:'ap2cu', code:'com.ap2cu.applets.MyApplet', width:1, height:1};
var parameters = {jnlp_href:'ap2cu-applets.jnlp'};
deployJava.runApplet(attributes, parameters, '1.6');
var myApplet = document.getElementById('ap2cu');
myApplet.createFile('C:/test.txt', 'Content of the test file');
var myDate = new myApplet.Packages.java.util.Date();
alert(myDate.getTime());
</script>

On peut aussi appeler du Javascript depuis le Java (il faut ajouter le paramètre MAYSCRIPT dans la délcaration de l'applet):

public class MyApplet extends Applet {
public void executeJavascript(String command) {
JSObject win = (JSObject) JSObject.getWindow(this);
win.eval(command);
}
}

Pour faire intéragir Java et Javascript, il faut un descripteur d'applet JNLP (Java Network Launching Protocol):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jnlp spec="1.0 " codebase="http://ap2cu.com/tools/applets" href="ap2cu-applets.jnlp">
<information>
<title>AP2cu Applets</title>
<vendor>Antoine PINEAU</vendor>
</information>
<resources>
<j2se version="1.6 " href="http://java.sun.com/products/autodl/j2se"/>
<jar href="ap2cu-applets.jar" version="1.0.0" main="true"/>
<jar href="dom4j-1.6.1.jar" version="1.6.1" main="false"/>
</resources>
<applet-desc name="ap2cu" main-class="com.ap2cu.applets.AP2cuApplet" width="1" height="1"/>
<update check="background"/>
</jnlp>

Titre
Et la sécurité dans tout ça ?

Texte

Le système de sécurité des applets Java interdit totalement aux applets d'accéder au ressources de la machine (disque dur, base de registre) et au réseau (l'applet ne peut communiquer qu'avec son serveur d'origine)
Signer un jar numériquement permet de demander à l'internaute s'il autorise l'applet à outrepasser cette sécurité

On peut signer un jar de 2 manières différentes:

  • En ligne de commande, par les commandes fournies avec la JDK:
    • jdk-home/bin# keytool -genkey -alias votreNomdAlias
      On répond ensuite normalement aux questions posées (et on note les mots de passe choisis!)
    • jdk-home/bin# jarsigner -verbose /chemin/vers/la/librairie/ma-librairie.jar votreNomdAlias
      On utilise le mote de passe de la clé cryptographique générée précedemment
  • Avec un script Ant:

    <!-- =================================
    S I G N - J A R
    ================================= -->
    <target name="SignJar" description="Sign the Jar file" depends="Jar">
    <delete file="MyKeyStore" />
    <genkey alias="MyAlias" storepass="MyPassword" keystore="MyKeyStore" validity="365">
    <dname>
    <param name="CN" value="Antoine PINEAU" />
    <param name="OU" value="DEV" />
    <param name="O" value="Eurelis" />
    <param name="C" value="FR" />
    </dname>
    </genkey>
    <signjar jar="ma-librairie.jar" alias="MyAlias" storepass="MyPassword" keystore="MyKeyStore" />
    </target>

  • Pour passer la sécurité, il faut également faire usage du package java.security
    Exemple de création de fichier sur le disque dur de l'internaute:

    public static void createFile(final String fileName, final String content) {
    java.security.AccessController.doPrivileged(new java.security.PrivilegedAction<String>() {
    public String run() {
    try {
    File file = new File(fileName);
    if (!new File(file.getParent()).isDirectory())
    new File(file.getParent()).mkdirs();
    FileOutputStream output = new FileOutputStream(file);
    output.write(content.getBytes());
    output.close();
    return fileName " created";
    }
    catch (Exception e) {
    return fileName " could not been created: " e.getMessage();
    }
    }
    });
    }

Titre
Bibliographie

Texte

Introduction aux applets :

  • http://fr.wikipedia.org/wiki/Applet
  • http://www.webmaster-hub.com/publication/Introduction-aux-applets-Java.html

Applets sur le site officiel de Sun :

  • http://java.sun.com/applets/

JNLP file syntax :

  • http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html

Recommandations du W3C pour l'intégration des applets dans une page web :

  • http://www.w3.org/TR/html4/struct/objects.html#edef-APPLET

Signer une applet :

  • http://www.commentcamarche.net/faq/3841-java-creer-une-applet-qui-accede-au-disque-dur

Intéractions Applet / Javascript :

  • Appeler Java depuis JavaScript
  • Appeler JavaScript depuis Java

Exemples d'utilisation en ligne :

  • POST / GET parameters to an URL : http://ap2cu.com/tools/post-get/


Sources :

  • Sources Applet (Java)
  • Sources Web (HTML, CSS, JS)

Nombres premiers :

  • http://ap2cu.com/tools/prime/

Sources:

  • Sources Applet (Java)
  • Sources Web (HTML, CSS, JS)

Le Compte est Bon :

  • http://ap2cu.com/tools/chiffres-lettres/le-compte-est-bon.html

Sources :

  • Sources Applet (Java)
  • Sources Web (HTML, CSS, JS)
Auteur
By Antoine
Haut