Je suis en train de comprendre les bases de la sécurité Java et l'utilisation AccessController.doPrivileged() i a commencé avec un exemple de programmeutilisation AccessController
import java.security.AccessController;
import java.security.PrivilegedAction;
public class AccessSystemProperty {
public static void main(String[] args) {
System.out.println(System.getSecurityManager());
AccessController.doPrivileged(
new PrivilegedAction<Boolean>(){
public Boolean run(){
System.out.println(System.getProperty("java.home"));
return Boolean.TRUE;
}
}
);
}
}
si je tente de passer au-dessus du code à l'aide de gérer la sécurité par défaut je reçois AccessControlException Mon stacktrace est
C:\>java -Djava.security.manager AccessSystemProperty
[email protected]
Exception in thread "main" java.security.AccessControlException: access denied (
java.util.PropertyPermission java.home read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at AccessSystemProperty$1.run(AccessSystemProperty.java:9)
at AccessSystemProperty$1.run(AccessSystemProperty.java:8)
at java.security.AccessController.doPrivileged(Native Method)
at AccessSystemProperty.main(AccessSystemProperty.java:6)
bien vouloir me aider à obtenir une image claire de
1) lorsque nous devons utiliser AccessController.doPrivileged()?. (si SecurityManager est présent, nous utilisons AccessController.doPrivileged pourquoi cela échoue dans l'exemple ci-dessus) 2) quel est l'avantage réel que nous obtenons en utilisant AccessController et PrivilegedAction ?. 3) Avons-nous besoin d'un fichier de règles personnalisé pour l'exemple ci-dessus? Merci, Paul
Salut Rob, Merci pour une telle explication claire et détaillée. J'essayais toujours de classe unique, donc je n'étais pas capable de comprendre la différence. Lorsque nous activons le gestionnaire de sécurité par défaut (en utilisant -Djava.security.manager) existe-t-il un fichier de politique utilisé pour restreindre l'accès? (Qui fait partie de JDK) <"> "le gestionnaire de sécurité vérifie la pile pour voir si chaque classe plus haut sur la pile a PropertyPermission ". <"> Ici vous vous référez StackTraceElement [] de Thread.currentThread(). GetStackTrace(); Ou la mémoire Stack? .Pourriez-vous s'il vous plaît expliquer un peu à ce sujet? –
@PaulErric les fichiers de règles par défaut sont définis dans le fichier java.security et sont (généralement) policy.url.1 = fichier: $ {java.home} /lib/security/java.policy policy.url.2 = fichier : $ {user.home} /. java.policy. Ce lien a plus: http://docs.oracle.com/javase/1.4.2/docs/guide/security/PolicyFiles.html#DefaultImpl.Par pile, je veux dire la séquence d'appel des méthodes que vous pouvez voir dans les éléments stacktraceelements. –