Problème de chargement d'une classe
Bonjour,
Je suis actuellement en train d'étudier la sécurité Java et j'essaye, dans ce cadre, de charger une classe Java à travers le net.
J'ai à l'adresse http://kuroro72.free.fr/PTrans/ ma classe Test.java dont voici le code
Code:
1 2 3 4 5 6 7 8
|
public class Test{
private int nb=1985;
public int getNb(){
return nb;}
} |
Pour le moment je ne me soucis pas des packages.
J'essaye maintenant de charger dans une application cette classe grâce à un URLClassLoader. Il arrive bien à me trouver le fichier (résultat de la fonction findResource()) mais le chargement renvoi une erreur.
Voici le code de mon application
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
public class TestExec {
public static void main(String[] args) throws IOException, ClassNotFoundException{
MonSecuManager mm = new MonSecuManager();
System.setSecurityManager(mm);
URL[] url = new URL[1];
url[0]=new URL("http://kuroro72.free.fr/PTrans/");
URLClassLoader ucl = URLClassLoader.newInstance(url);
URL u = ucl.findResource("Test.java");
System.out.println(u);
Class c = ucl.loadClass("Test.java");
}
} |
Et la liste des exceptions lancées
Exception in thread "main" java.lang.ClassNotFoundException: Test.java
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.net.FactoryURLClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at testSecurityMangager.TestExec.main(TestExec.java:33)
J'ai dabord pensé que ma classe n'était pas chargeable car elle venait du net (classe non fiable) et donc que le SecurityManager de Java n'autorisait pas son chargement. Cependait même en surchargeant cette classe, je n'arrive toujours pas à obtenir son chargement.
Si quelqu'un pouvait m'aider je le remercierai grandement.
PS: voici mon code de mon security manager
Code:
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
|
package testSecurityMangager;
import java.io.FilePermission;
import java.security.Permission;
import sun.security.util.SecurityConstants;
public class MonSecuManager extends SecurityManager{
public MonSecuManager(){
super();
}
public void checkCreateLoader(){
}
public void checkExec(String cmd){
}
public void checkPermission(Permission p){
}
public void checkAccess(Thread g){
}
public void checkAccess(ThreadGroup g){
}
public void checkDelete(String file) {
}
public void checkRead(String file) {
}
public void checkWrite(String file) {
}
} |
Cela revient a autoriser la pluspart des actions sur mon application
betise quand tu nous tiens
Merci natha pour ta réponse cela m'a montré ma bétise.
Le problème venait que j'ai mis sur le site le .java et non le .class
Or tout le monde le sait on charge les .class et non le reste ;)
J'avoue je suis impardonnable la dessus
Merci encore a toi natha sinon je serais resté longtemps la dessus
PS: et donc faut bien mettre .loadClass("Test")