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