2015-02-12 1 views
0

Я работаю над созданием простого сервера RMI в java. Я хочу быть через сеть, поэтому я не могу использовать локальный хост для IP-адреса. У меня есть много кода, написанного, но я получаю сообщение об ошибке, которое гласит:Java RMI Client Server java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.security.policy" "write")

java.security.AccessControlException: access denied("java.util.PropertyPermission" "java.security.policy" "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.System.setProperty(Unknown Source) 
at test_Client.TestClient.main(TestClient.java:31) 

Я сделал много смотреть и не могу показаться, чтобы выяснить, что случилось с моим code.my сервер запускается нормально и выполняется на моем назначенном ip и номере порта. Если кто-то может помочь мне узнать, почему я получаю эту ошибку, это было бы здорово. Благодарю. Вот пример кода для моего клиента

package test_Client; 
//this is the client, it has it's own package 

import java.rmi.NotBoundException; 
import java.rmi.Remote; 
import java.rmi.RemoteException; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.util.Scanner; 
//import all needed rmi files 


import test_Interface.Constant; 
import test_Interface.testRMIInterface; 
//import my constant file so port number can be found. 
//import my test interface from my example interface project, example server testing 

public class TestClient { 
//start my class 


    public static void main(String[] args) throws RemoteException, NotBoundException{ 
     //throws exceptions so everything is not in try catch blocks... 

     if (System.getSecurityManager() == null) { 
       System.setSecurityManager(new SecurityManager()); 
      } 



     System.setProperty("java.security.policy", "C:/Users/Robert/workspace/ExampleClient"); 



     Registry registryClient = LocateRegistry.getRegistry(Constant.SERVER_IP, Constant.PORT_NUM); 
     //make my registry client and use port number from constants in example interface 
     //get the registry on the servers ip address with the port. 

     testRMIInterface remote = (testRMIInterface) registryClient.lookup(Constant.RMI_ID); 
     //using testInterface interface under my example interface 
     //look up the RMI ID and link it to the object created above 




     //this is the one method i have on the server. 

     String sendThis = ""; 
     System.out.println("Please enter a word"); 
     Scanner keyboard = new Scanner(System.in); 
     sendThis = keyboard.next(); 
     System.out.println(remote.returnTest(sendThis)); 
     //simple call to the server method returnTest 
     //takes in a string. and returns a different one 
    } 
} 
+0

Это относится к вашему SecurityManager. Я не знаю точного ответа, но место, которое нужно посмотреть, - это определение настраиваемых политик безопасности (вы можете сделать это из командной строки в качестве аргументов) или с помощью SecurityManager. Обратите внимание на security.policy и как его использовать: http://docs.oracle.com/javase/tutorial/rmi/running.html – ThePerson

+0

Спасибо, я просмотрел это раньше, и я не совсем полностью его понимаю. – DramaCop

ответ

0

Вы должны установить свойство политики Перед установкойSecurityManager.

В противном случае SecurityManager загружает политику по умолчанию, который не дает вам разрешение изменить политика.

+0

Я все еще получаю это Исключение из темы "main" java.security.AccessControlException: доступ запрещен ("java.net.SocketPermission" "10.0.7.82:55555" "connect, resolve") \t at java.security.AccessControlContext. checkPermission (Unknown Source) \t на java.security.AccessController.checkPermission (Unknown Source) \t в java.lang.SecurityManager.checkPermission (Unknown Source) \t в java.lang.SecurityManager.checkConnect (Unknown Source) \t в java.net.Socket.connect (Неизвестный источник) \t на java.net.Socket.connect (Неизвестный источник) \t на java.n et.Socket. (Неизвестный источник) \t на java.net.Socket. (Unknown Source) – DramaCop

+0

в sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket (Unknown Source) \t в sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket (Unknown Source) \t в sun.rmi.transport.tcp .TCPEndpoint.newSocket (Unknown Source) \t на sun.rmi.transport.tcp.TCPChannel.createConnection (Unknown Source) \t в sun.rmi.transport.tcp.TCPChannel.newConnection (Unknown Source) \t в sun.rmi .server.UnicastRef.newCall (Неизвестный источник) \t at sun.rmi.registry.RegistryImpl_Stub.lookup (Неизвестный источник) \t at test_Client.TestClient.main (Te stClient.java:38) – DramaCop