Исключение в потоке "main" java.security.AccessControlException: доступ запрещен (java.util.PropertyPermission * read, write)

111
18

Я пытаюсь запустить настольное приложение, которое разработано в java rmi. Хотя я пытаюсь выполнить это приложение в eclipse, я получаю следующую ошибку. Пожалуйста, помогите мне заранее.


Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)
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.checkPropertiesAccess(Unknown Source)
at java.lang.System.getProperties(Unknown Source)
at .HeadOfficeManager.Manager.main(Manager.java:103)

Вот код.


public static void main(String args[])
{
Manager frame = new Manager();
frame.setVisible(true);
// frame.show(); old 1.4

// Create and install a security manager
if (System.getSecurityManager()== null)
{
System.setSecurityManager(new RMISecurityManager());
}
try
{
Properties prop = System.getProperties();
String httpPath = prop.getProperty("HTTPPath");
new ClassFileServer(80, httpPath);
}
catch (IOException e)
{}

try
{
java.rmi.registry.LocateRegistry.createRegistry(1099);
System.out.println("RMI registry ready.");
}
catch (Exception e)
{
System.out.println("Exception starting RMI registry:");
e.printStackTrace();
}
try
{
RMIHandler = new ManagerRMIHandler();

// Bind the remote object stub in the registry
Registry registry = LocateRegistry.getRegistry();
registry.rebind("HeadOfficeManager", RMIHandler);

System.err.println("Server ready");
}
catch (Exception e)
{
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}

спросил(а) 2021-01-19T12:25:10+03:00 6 месяцев, 1 неделя назад
1
Решение
149

    Щелкните правой кнопкой мыши на приложении в eclipse и щелкните по настройкам запуска.
    Добавьте аргументы виртуальной машины в качестве -Djava.security.policy =java.policy.applet.
    Создайте файл, назовите его как java.policy.applet.

    Добавьте ниже строки в этот файл.


    grant  
    {
    permission java.security.AllPermission;
    };

    Сохраните его и запустите приложение.


Это даст все разрешения безопасности для вашего приложения Java.

ответил(а) 2021-01-19T12:25:10+03:00 6 месяцев, 1 неделя назад
78

У вас установлен SecurityManager, и вы не предоставили себе достаточно разрешений в вашем файле .policy для выполнения вашего кода. Исключение указывает, какое разрешение отсутствует, но, вероятно, больше. Запустите приложение с -Djava.security.debug = доступ, неясно, какие другие проблемы безопасности существуют.


Но реальный вопрос здесь - почему менеджер безопасности? Это нужно только на сервере RMI, с точки зрения RMI, если вы используете функцию кодовой базы RMI. В противном случае вам следует удалить его.

Также вы должны сохранить результат createRegistry где-нибудь, где он не будет собираться с мусором, например. в статической переменной. И как только вы это сделали, вызов getRegistry() является избыточным.

ответил(а) 2021-01-19T12:25:10+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема