Par programme d'accorder des Autorisations sans l'aide de la politique de fichier
Procédure de programmation pour la subvention AllPermissions
à un RMI application sans l'aide de la politique de fichier?
Mise à JOUR:
Après quelques recherches, j'ai écrit cette coutume de la Politique de Classe et installé via Policy.setPolicy(new MyPolicy())
.
Maintenant, je reçois l'erreur suivante:
autorisation non valide: (java.io.FilePermission
\C:\eclipse\plugins\org.eclipse.osgi_3.7.0.v20110613.jar lire
class MyPolicy extends Policy {
@Override
public PermissionCollection getPermissions(CodeSource codesource) {
return (new AllPermission()).newPermissionCollection();
}
}
OriginalL'auteur Adel Boutros | 2012-07-31
Vous devez vous connecter pour publier un commentaire.
Basé sur @EJP's conseils, j'ai de débogage à l'aide de
-Djava.security.debug=access
et a trouvé toutes les autorisations nécessaires dans un fichier de stratégie :Mais parce que je ne veux pas créer un fichier de stratégie, j'ai trouvé un moyen de répliquer par programme, par l'extension
java.security.Policy
classe et la définition de la politique au démarrage de mon application en utilisantPolicy.setPolicy(new MinimalPolicy());
implies
àreturn perms.stream().anyMatch(it->it-implies(p));
OriginalL'auteur Adel Boutros
Parce que votre
est traitée par Java comme immuable (pourquoi ajouter des autorisations à une collection qui permet déjà toutes les autorisations?), et parce que Java va essayer d'ajouter des autorisations à la collection. C'est là le message d'erreur vient de Java essayé d'ajouter un java.io.FilePermission à votre AllPermission.
Au lieu de cela, faire cela:
(new AllPermission()).newPermissionCollection()
renvoie une collection de permission qui renverra toujours false. C'est jusqu'à ce que vous ajoutez une instance de AllPermission.Voici le lien pour le code source: grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/...
OriginalL'auteur WellINever
De ne pas installer le SecurityManager. Vous n'aurez besoin que si vous utilisez le code de fonction, et si vous avez besoin que vous avez besoin d'une bonne .la politique de fichier,
java.security.Policy
qui contient unAllPermissionCollection
. Cela peut-il fonctionner de cette façon? et ce qui doit être changé pour le faire fonctionner?Pouvez-vous voir mon edit s'il vous plaît?
Si vous êtes à l'aide de la base de code de fonction, vous ne voulez certainement pas à accorder AllPermission. Vous allez être en cours d'exécution de code à partir des anothe source. Vous avez besoin de construire un bon .fichier de stratégie qui accorde exactement les autorisations que vous pensez que le code téléchargé, et pas d'autres. Vous pouvez établir qu'avec un peu de helpmfr de -Djava.de sécurité.debug=accès,défaillance.
Je sais déjà comment créer un fichier de stratégie. Ce n'est pas ce que je veux parce que mon application est un Eclipse, vous ne pouvez donc pas ajouter un fichier de stratégie à un seul eclipse-plugin, vous devez l'ajouter à la
eclipse.ini
laquelle les clients vont trouver difficile à accepterVous n'avez pas le choix. Il n'y a aucun moyen de faire ce que vous voulez. En tout cas, je suggère que vos clients peuvent trouver encore plus difficile à accepter un RMI produit qui désactive toutes les fonctions de sécurité conçues en RMI, si c'était possible, qui, heureusement, il n'est pas. Ce que vous devriez faire est de donner le client, l'occasion de définir les autorisations, au lieu d'essayer d'échapper à la question et de briser le modèle de sécurité de Java.
OriginalL'auteur user207421
Court de solution
Étendre votre solution mise à jour:
Considérer, que Politique.getPermissions() doit toujours retourner une mutable PermissionCollection
Cette solution fonctionne déjà, car elle ajoute une AllPermission objet dans chaque appel de la
Policy.getPermissions(ProtectionDomain)
, qui fait référence àPolicy.getPermissions(CodeSource)
.Propre solution
Mais il y a une solution plus propre, qui ne suit pas inutile, d'autres Autorisations, depuis AllPermissions permet assez déjà tout.
OriginalL'auteur Adam Taras