Java avancé - Maîtrise informatique Programmation du Web et sécurité 1. Vous écrivez une application en Java. La classe principale de cette application s'appelle fr.unice.truc.Main. Cette application charge une classe distante p1.ClasseDistante depuis un autre ordinateur ; l'adresse de chargement est http://autreordi.autredomaine.fr/classes/p1/ClasseDistante.class. Une méthode ecrire(String liste) de cette classe est appelée directement par votre code. Cette méthode ecrire doit écrire des données sur le disque dur de votre ordinateur dans un chier liste placé sous votre répertoire HOME. Pour vous rassurer vous voulez autoriser l'application à écrire dans ce chier liste mais pas ailleurs. Décrivez précisément ce qu'il faut faire, de la commande à lancer pour démarrer l'application (vous supposerez qu'il n'y a pas besoin d'indiquer un classpath particulier) jusqu'à l'écriture des chiers de police de sécurité. 2. Vous modiez le code de votre application. Votre code n'appelle pas directement ClasseDistante mais appelle une méthode m() d'une autre classe distante AutreClasseDistante placée sur un troisième ordinateur, et c'est cette méthode m() de AutreClasseDistante qui à son tour appelle la méthode ecrire de ClasseDistante. Dites ce qui va se passer si vous relancez l'application comme dans la question précédente. Expliquez. 3. Sans donner de détails cette fois-ci dites ce qu'il faut faire pour que votre application fonctionne correctement comme dans la première question. Expliquez votre réponse. 4. Comment la méthode m() aurait-elle dû appeler la méthode ecrire pour que l'application fonctionne dans les mêmes conditions que pour la question 1 1 Correction 1. Il faut Lancer l'application avec l'option -Djava.security.manager ou au moins avec un gestionnaire de sécurité approprié sinon l'application étant lancé par une classe locale aura le droit de tout faire, même si une des classes vient d'ailleurs. 1 Ajouter ceci dans le chier de police .java.policy placé dans le répertoire home de l'utilisateur de l'application : grant codeBase "http://autreordi.autredomaine.fr/classes/*" { permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "${user.home}${/}liste", "write"; }; 2. L'application ne va plus avoir le droit d'écrire dans le chier liste. 3. Ca va échouer car toutes les classes distantes doivent recevoir l'autorisation. Il faudra donner aussi l'autorisation d'écrire dans liste à la classe AutreClasseDistante. 4. Elle aurait dû l'appeler avec la méthode doPrivileged. 2