RMI连接被拒绝
问题描述:
我试图得到一个RMI连接下去。我遇到了很多安全问题,但一直无法找到解决办法。我执行我的jar文件有:RMI连接被拒绝
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
作为JVM参数,其中my.policy
文件包含:
grant {
permission java.security.AllPermission;
};
此外,为了避免检查出现在你的代码中的NULL和手动创建一个SecurityManager
的,你可以要求一个安全管理器是通过传递JVM开关自动为您的应用程序安装:-Djava.security.manager
。
你最终JVM调用看起来应该像:
java -Djava.security.manager -Djava.security.policy=/some/path/my.policy
答
这是两个单独的例外。首先是权限问题。第二个,EOFException可能有多种原因。我需要看到java -version和完整的堆栈跟踪来进一步协助。
+0
我有几分同样的问题,我的应用程序,它使用RMI运行到一个EOFException类和崩溃,但如果我设置权限为所有权限都运行正常。任何允许可以导致这种情况的想法? – Oli 2014-04-07 10:35:18
现在运行,谢谢。试用过这个文件,但没有添加到安全管理器中。 +1 – chrissygormley 2010-11-18 12:26:51