Диспетчер безопасности Java (странное поведение)
Я тестирую Java Security Manager в простом Java-приложении.
Я пишу свойства "user.home", "user.info" Я читаю свойства "user.home", "user.info"
Я устанавливаю файл политики, который разрешает чтение / запись в "user.home", "user.info". Я запускаю диспетчер безопасности.
Я все еще должен быть в состоянии читать / писать "user.home", "user.info", поскольку файлы политики дают разрешение.
Но я получаю исключение безопасности.
Что случилось?
Мой код Java
import java.security.AccessControlException;
public class TestSecurityManager {
final static String securityPolicyFile = "properties_permissions.policy";
public static void main(String[] args) {
System.setProperty("user.info", "123456");
System.out.println("user.info is : " + System.getProperty("user.info"));
// Enable the security manager
try {
System.out.println("***");
System.out.println("Setting policy file");
System.out.println("***");
System.setProperty(securityPolicyFile, securityPolicyFile);
System.out.println("***");
System.out
.println("Security manager is STILL disabled, "
+ "read/write access to \"user.info\" system property "
+ "is allowed"
);
System.out.println("***");
System.setProperty("user.info", "123456");
System.out.println("user.info is : " + System.getProperty("user.info"));
//
System.out.println("***");
System.out.println("Setting Security manager");
System.out.println("***");
SecurityManager securityManager = new SecurityManager();
System.setSecurityManager(securityManager);
} catch (SecurityException se) {
try {
System.setProperty("user.info", "123456");
} catch (AccessControlException acew) {
System.out.println("!!!Write access to the user.info system property is not allowed!");
}
try {
System.out.println("user.info is : " + System.getProperty("user.info"));
} catch (AccessControlException acer) {
System.out.println("Read access to the user.info system property is not allowed!");
}
}
}
Файл моей политики
grant {
permission java.util.PropertyPermission "user.home", "read";
permission java.util.PropertyPermission "user.info", "write";
};
ххх
1 ответ
Вы неправильно устанавливаете системное свойство политики безопасности. Так должно быть:
System.setProperty("java.security.policy", securityPolicyFile);
Если после настройки это все еще не работает, включите отладку с помощью -Djava.security.debug=policy
Отметьте и проверьте, что файл читается правильно. Вы должны увидеть такую строку:
политика: чтение файла:/path/to/your/properties_permissions.policy