Я пытаюсь понять основы безопасности Java и AccessController.doPrivileged() я начал с примера программы
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;
}
}
);
}
}
если я пытаюсь запустить выше код, используя управление безопасностью по умолчанию, я получаю AccessControlException Мой стек состоит из
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)
Просьба помочь мне получить четкое представление о
1), когда нам нужно использовать AccessController.doPrivileged()?. (если присутствует SecurityManager, мы используем AccessController.doPrivileged, почему это не работает в приведенном выше примере) 2) Какое реальное преимущество мы получаем с помощью AccessController и PrivilegedAction?. 3) Нужен ли нам специальный файл политики для приведенного выше примера? Благодаря, Пол