Bonjour,
mes jar sont déjà dans le classpath, et cela a résolu mon problème de compilation.
J'appelle donc juste mon .class et non plus mon .jar dans le code de ma page.
J'ai maintenant l'erreur suivante :
java.lang.NoClassDefFoundError: Affichage (wrong name: affichage/Affichage)
Pour info, voici le code de mon applet :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| package affichage;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.applet.*;
import java.io.*;
import java.util.*;
import java.security.*;
import java.security.cert.X509Certificate;
import java.security.cert.CertStore;
import java.security.cert.CertSelector;
import java.security.cert.*;
import javax.security.auth.x500.X500Principal;
import se.assembla.jce.provider.ms.*;
import java.util.Set;
import java.net.*;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.DERObject;
import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.CMSProcessable;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSSignedDataGenerator;
import java.util.zip.*;
import java.util.Enumeration;
public class Affichage extends Applet{
/* cle privee utilisee pour signer */
PrivateKey privatekey;
/* certificat joint a la signature */
X509Certificate certperso;
/* Certificate store */
CertStore certstore;
CertSelector certselect;
/* certificate store pour la chaine de certification */
/* magasin de certificat "Autorite intermediaire" */
CertStore certstoreiac;
/* magasin de certificat "Autorite racine" */
CertStore certstoreac;
/* curseur sur les certificats "Autorite intermediaire" */
CertSelector certselectiac;
/* curseur sur les certificats "Autorite racine" */
CertSelector certselectac;
/* Liste des certificats de la chaine de certification. */
LinkedList ListCertification;
/* tableau des certificats X509 du certificate store */
X509Certificate[] certcollection;
/* tableau indiquant s'il existe ou non une clé privée */
Boolean[] arrayPrivateKey;
/* tableau indiquant si la CRL est definie ou non */
Boolean[] arrayCRL;
/* tableau indiquant si les certificats sont revoques ou non */
Boolean[] arrayRevoque;
/* tableau indiquant si les dates du certificat sont valides ou non */
Boolean[] arrayValid;
/* tableau des cles privees des certificats du certificate store */
PrivateKey[] privateKeycollec;
/* Certificate store et certificate factory. Utilises pour l'initialisation de la liste de revocation */
X509CRL listRevocation;
/* tableau contenant les noms des certificats. Pour affichage dans la fenetre */
String[] arrayNomCert;
/* nombre de certificats dans le magasin */
int nbCert;
/* definition de la chaine de Point d'entree des CRL, conformement a la norme RFC */
String CRL_OID="2.5.29.31";
static final int BUFFER = 2048;
/* fonction ouvrant les magasins de certificats et procédant aux premieres initialisations */
/* retourne 0 en cas de succes de l'ouverture d'un magasin non vide */
/* 1 en cas de succes de l'ouverture d'un magasin vide */
/* 1 en cas d'echec */
public int ouvrir_magasin_certificat(){
/* initialisation du Provider. Ici Assembla pour permettre l'ouverture du magasin WINDOWS */
Security.addProvider(new MSProvider());
try {
/* ouverture des magasins de certificats */
open_cert_store_ms();
/* stockage du nombre de certificats dans le magasin */
certselect=new X509CertSelector();
Collection collect=certstore.getCertificates(certselect);
/* recuperation du nombre de certificats */
nbCert=collect.size();
/* s'il n'existe pas de certificats, retourner un code erreur */
if(nbCert == 0)
return 1;
return 0;
}
catch (Exception e){
return -1;
}
}
/* fonction d'ouverture des 3 magasins MS */
/* retourne 0 en cas de succes de l'ouverture des 3 magasins */
/* -1 en cas d'echec */
public int open_cert_store_ms(){
try{
/* instanciation du magasin de certificats a partir du magasin "PERSONNEL" microsoft*/
certstore=CertStore.getInstance("MY", null, "assembla");
/* instanciation du magasin de certificats a partir du magasin "Autorités intermédiaires" microsoft*/
certstoreiac=CertStore.getInstance("CA", null, "assembla");
/* instanciation du magasin de certificats a partir du magasin "Autorités " microsoft*/
certstoreac=CertStore.getInstance("ROOT", null, "assembla");
ListCertification=new LinkedList();
return 0;
}
catch (Exception e){
return -1;
}
}
/* retourne le nombre de certificats */
public int getNbCertif(){
return nbCert;
}
public void init() {
ouvrir_magasin_certificat();
}
public void paint(Graphics g) {
g.drawString(String.valueOf(getNbCertif()), 50, 25);
}
} |
Mon classpath est le suivant :
1 2
|
/usr/java/java_home/jre/lib/rt.jar:/usr/java/java_home/jre/lib/ext/assembla_msks_jce.jar:/usr/java/java_home/jre/lib/ext/bcprov.jar:/usr/java/java_home/jre/lib/ext/bcmail.jar:./ |
Et une fois compilé, je place mon .class dans le répertoire
APPLICATION/applet/affichage/
L'appel de mon applet se fait dans une page HTML de la manière suivante :
<applet code="Affichage.class" codebase="<%=adresseRacine%>/applet/affichage/"> </applet>
Je sais qu'il ne faut plus utiliser le tag "applet", mais dans l'immédiat, pour les besoins de mes tests, ca suffira. Je modifierai mon appel quand mon applet fonctionnera.
J'ai récupéré le code de mon applet d'une petite application indépendante que j'ai réalisé et dont le but est d'interroger la base de certificat du poste et de les lister... J'avais réalisé ce programme sous Eclipse, et il avait pour but de tourner en local sur des postes Windows. J'avais déjà eu des soucis du meme type à l'époque, que j'avais résolu en ajoutant un plug-in dans Eclipse qui me permettait de construire des .jar incluant mes .jar externes. Je pensais donc qu'il fallait que je fasse la même chose sous Unix, pour que les fonctions externes soient bien connues.
[/code]
Partager