Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > RMI политики


Автор: Fieral 5.2.2009, 15:43
Программа вываливает:
Exception occurred: java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)

Судя по гуглу необходимо разрешить вызов удалёных методов.

В качестве решений предлагаются различные варианты как то:
1) написать свой SecurityManager - который по сути наследует старый, но только методы поправлены так чтоб ему было абсолютно побарабану на то кто и что делает - а он просто всё разрешает.
2) Написать файл политики который нужно вызывать из командной строки каждый раз когда стартует предложение.

Первый вариант меня смущает тем, что как-то нехорошо ломать то что люди делали - не с проста же они создали этот консервативный SecurityManager.

Второй вариант я вообще не понимаю как использовать: В голову приходит идея каждый раз, когда приложение собирается открыть новый RMI сервер, оно должно писать на диск файл политики, и дёргать из консоли соответствующий класс указывая java -Djava.security.manager -Djava.security.policy=policy-file MyClass. Но даже я понимаю что это какой-то бред.

Может мне кто-нибудь объяснить как вывесив методы для удалённого вызова разрешить их вызывать?


Автор: chand0s 6.2.2009, 11:26
Цитата(Fieral @ 5.2.2009,  13:43)
Второй вариант я вообще не понимаю как использовать: В голову приходит идея каждый раз, когда приложение собирается открыть новый RMI сервер, оно должно писать на диск файл политики, и дёргать из консоли соответствующий класс указывая java -Djava.security.manager -Djava.security.policy=policy-file MyClass. Но даже я понимаю что это какой-то бред.

Не надо ни на какой диск ничего писать, вы просто запускаете свое приложение с указанием файла политики, который ему (приложению) надо использовать, т.е. создаете файл с содержимым 

Код

grant { 
    permission java.security.AllPermission;
};


и указываете этот файл при старте java-машины, примерно так:
Код

java -Djava.security.policy=<путь к этому файлу>


Кажется так.

Автор: Fieral 10.2.2009, 15:35
Касательно 
Код

grant { 
    permission java.security.AllPermission;
};

Тут http://patriot.net/~tvalesky/easyrmi.html написано:
When you run the client or the server, pass the location of your new security policy file in as an argument. This allows you to run under a new policy without having to modify your system policy files. Here is a .policy file that grants all permissions to everybody. DO NOT install this policy file in a production system.

К томуже не понятно:
1) как java -Djava.security.policy=<путь к этому файлу> будет попадать в строку запуска Java машины.
2) Лично мне кажется логичным что если в процессе выполнения моей программы я собираюсь открыть порт 7000 то я и выписываю разрешение политику на этот порт, а остальные порты не трогаю. А если вешать permission java.security.AllPermission; то не понятно на зачем вообщи нужны секъюрити-политики, если я "открываю ворота на распашку"? (Ну и конечно если порт 7000 уже кем-то занят, то программа пытаеся открыть 7001 и выписывает разешение на него и т.д...)

Автор: Fieral 3.4.2009, 13:26
актуально

Автор: ivg 3.4.2009, 16:59
Научились запускать "Java машину"? smile 

Автор: Fieral 4.5.2009, 14:07
допустим.

Автор: Fieral 6.5.2009, 17:03
Особенно интересен данный вопрос в контексте вот этой мысли:
http://forum.vingrad.ru/index.php?showtopic=252624&view=findpost&p=1845165
Цитата

Я пишу коммерческое ПО под нашей лицензией. С закрытыми исходниками. Условия лицензии One-Jar соблюдены.
А для пользователя нужно предоставить массу удобств. И программа работать будут не только в Linux, точнее она будет работать в основном в Windows и редко на других платформах. Создавать архив нельзя, потому что нельзя распаковываться. Если бы ты знал, какие бывают чудные пользователи!!! Небольшая трудность и они откажутся от ПО. Поэтому должно быть всё максимально удобно. Если поддерживается клик мышью по jar-файлу с автоматическим запуском, то так и должно быть. А если нет, то надо на сайте максимально понятно указать как запустить программу. Чтобы это было просто. Вот тебе всё понятно. А пользователю может быть не понятно. Он может вообще только что комп увидел и ему просто надо потыкать мышкой и получить результат. Так что должно быть всё просто.


Кто будет на машине юзера 
Цитата(ivg @  3.4.2009,  16:59 Найти цитируемый пост)
запускать "Java машину"?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)