| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||||||
Не надо ни на какой диск ничего писать, вы просто запускаете свое приложение с указанием файла политики, который ему (приложению) надо использовать, т.е. создаете файл с содержимым
и указываете этот файл при старте java-машины, примерно так:
Кажется так. |
| Автор: Fieral 10.2.2009, 15:35 | ||
Касательно
Тут 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 машину"? |
| Автор: Fieral 4.5.2009, 14:07 |
| допустим. |
| Автор: Fieral 6.5.2009, 17:03 | ||
| Особенно интересен данный вопрос в контексте вот этой мысли: http://forum.vingrad.ru/index.php?showtopic=252624&view=findpost&p=1845165
Кто будет на машине юзера |