Когда вы устанавливаете диспетчер безопасности по умолчанию, приложение использует политику безопасности по умолчанию. Если вы хотите предоставить нашу собственную политику, вы можете сделать это в файле политики, записанном как:
grant {
permission java.lang.RuntimePermission "accessDeclaredMembers.{class name}";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
CheckMemberAccess имеет политику по умолчанию — разрешать доступ к членам PUBLIC, а также доступ к классам, которые имеют тот же загрузчик классов, что и вызывающая сторона. Во всех остальных случаях этот метод вызывает checkPermission() с разрешением RuntimePermission("accessDeclaredMembers").
Для отражающих операций используйте класс ReflectPermission и suppressAccessChecks, которые позволяют подавлять стандартные проверки доступа Java — для общедоступных, защищенных и частных членов, доступ по умолчанию — выполняемые отраженными объекты в месте их использования.
Но это опасно тем, что информация (возможно, конфиденциальная) и обычно недоступные методы могут стать доступными для вредоносного кода.
После того, как вы предоставили файл политики, вы можете проверить его следующим образом:
try {
ReflectPermission permission = new ReflectPermission("suppressAccessChecks");
permission.checkGuard(null);
System.out.println("Permission granted");
} catch (SecurityException e) {
System.out.println("Permission denied");
}
person
Tamara Koliada
schedule
26.12.2018