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
Pour le moment je ne me soucis pas des packages.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Test{ private int nb=1985; public int getNb(){ return nb;} }
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
Et la liste des exceptions lancées
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"); } }
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
Cela revient a autoriser la pluspart des actions sur mon application
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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) { } }
Partager