-
ClassLoader et plug-in
Bonjour à tous !
Je cherche a créer une plateforme me permettant de gérer des applications dynamiquement. Je m'explique : en gros on pourrais installer de nouvelles 'applications' (des .jar) dynamiquement et la plateforme utiliserait des ClassLoader afin d'instancier dynamiquement ces nouvelles 'applications'. Un peu à la manière des systèmes comme android qui permettent d'installer de nouvelles applications. Jusque là, pas de problème, la réflexivité permet tout cela.
Mais moi je voudrais pouvoir limiter ce que ces 'applications' peuvent faire. En effet, je voudrais par exemple qu'elles ne puissent pas accéder à tous les fichiers du disque mais seulement à un espace limité. Pour cela, il faudrait faire un truc du genre redéfinir la classe File ou autre mais là je bloque et je ne sais pas comment m'y prendre. (Je ne sais pas si je suis clair mais bon ... ).
Donc si quelqu'un à une idée pour solutionner mon problème ca serait sympa de partager.
Merci d'avance !
-
Ce genre de boulot, en java, est le rôle du SecurityManager. Tu dois écrire ton propre securitymanager et le définir comme security manager par défaut. Ensuite, il devra déterminer, pour ses appel, par quel classloader les appels ont lieu afin d'autoriser ou non les opération. C'est pas une mince affaire à mettre en place.
-
Je sais que pour changer le securityManager il faut utiliser System.setSecurityManager(). Mais ensuite lorsque je créer mon propre securitymanager, je ne sais pas comment savoir par quel classloader l'appel a été fait ...
-
Regarde le code du security manager par défaut pour avoir une idée de comment il fonctionne.
currentClassLoader() sur le SecurityManager(). Note que la sécurité basée sur le classloader n'est plus recommandée, on recommande maintenant la securité basée sur le SecurityContext (à voir dans la doc, je ne connais pas ;) )
-
D'accord, merci je ais chercher de ce coté là =)
J'ai aussi vu dans la doc de ClassLoader la methode defineClass (http://docs.oracle.com/javase/6/docs...String,%20byte[],%20int,%20int,%20java.security.ProtectionDomain%29 ) dans laquelle on peut spécifier un PotectionDomain . Et dans la doc de ProtectionDomain on tombe sur ca: http://docs.oracle.com/javase/6/docs...rity.Principal[]%29 avec écrit "This constructor is typically used by ClassLoaders and DomainCombiners which delegate to Policy to actively associate the permissions granted to this domain. This constructor affords the Policy provider the opportunity to augment the supplied PermissionCollection to reflect policy changes. " Mais je n'ai pas réussi à m'en sevir ... Si quelqu'un sait comment utiliser cette classe =)