我有一个奇怪的错误:
我的代码:
System.setProperty("java.security.policy", "client.policy");
System.setProperty("java.rmi.server.codebase", Servicecodebase);
System.setSecurityManager(new RMISecurityManager());
Class<?> InterfaceMath = RMIClassLoader.loadClass("http://127.0.0.1/dis/service.jar", "Service.InterfaceMath");
Remote service = null;
service = Naming.lookup("rmi://127.0.0.1:1099/ok"); // Error Message here
Method getInformation = service.getClass().getDeclaredMethod("test", String.class);
String res = (String) getInformation.invoke(service);
System.out.println(" res : "+res);
我的文件client.policy:
grant {
permission java.security.AllPermission;
permission java.net.SocketPermission "localhost:1099", "connect, resolve";
permission java.net.SocketPermission "127.0.0.1:1099", "connect, resolve";
permission java.net.SocketPermission "localhost:80", "connect, resolve";
};
我的错误:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
我在运行配置中使用Eclipse - VM Arguments -Djava.security.policy == client.policy 而且lanch ---在控制台上启动rmiregistry。
这很奇怪,因为我配置了我的文件,我加载了我的界面,但我无法与我的RMI通信。服务器我不知道为什么会遇到这个问题。
更新: 我的项目ClientRMI:
答案 0 :(得分:1)
显然找不到该文件。由于您只将其指定为“client.policy”,因此在程序启动时它必须位于当前工作目录中。
如果您使用
运行它-Djava.security.debug=access,failure
您将获得非常完整的安全管理器故障跟踪,包括当时生效的安全域以及配置它的.policy文件。