RMI连接被拒绝

我想要获得rmi连接。 我遇到了很多安全问题,但一直无法找到解决这一问题的方法。 我执行我的jar文件:

java -Djava.security.policy=java.security.AllPermission -jar "myjarfile" 

我用来创建它的代码是:

 public class server { public static void main(String args[])throws Exception { if (System.getSecurityManager() == null) System.setSecurityManager ( new RMISecurityManager() { public void checkConnect (String host, int port) {} public void checkConnect (String host, int port, Object context) {} }); try { sampleserverimpl server = new sampleserverimpl(); System.out.println("SERVER IS WAITING"); LocateRegistry.createRegistry(2020); //Runtime.getRuntime().exec("rmiregistry 2020"); Naming.rebind("//localhost:2020/SERVER", server); } catch(Exception e) { System.out.println(e); } } }; 

我收到的错误跟踪是:

 Exception in thread "RMI TCP Connection(idle)" java.security.AccessControlExcept ion: access denied (java.net.SocketPermission 127.0.0.1:31199 accept,resolve)jav a.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: java.io.EOFException 

我尝试了不同的方法来解决这个问题,有人能在这里看到这个问题吗?

谢谢

-Djava.security.policy接受指向策略文件的URL,该策略文件又包含权限。 所以你应该: -Djava.security.policy=/some/path/my.policy作为my.policy文件包含的JVM参数:

 grant { permission java.security.AllPermission; }; 

此外,为了避免代码中出现NULL检查和手动创建SecurityManager ,您可以通过传递JVM开关请求为您的应用程序自动安装SecurityManager: -Djava.security.manager

您的最终JVM调用应如下所示:

 java -Djava.security.manager -Djava.security.policy=/some/path/my.policy 

这是两个独立的例外。 第一个是权限问题。 第二个是EOFException,可能有多种原因。 我需要看看java -version和完整的堆栈跟踪以进一步提供帮助。