chr*_*ley 3 java rmi hosts rmiregistry
我正在努力获得rmi连接.我遇到了很多安全问题,但一直无法找到解决这一问题的方法.我执行我的jar文件:
java -Djava.security.policy=java.security.AllPermission -jar "myjarfile"
Run Code Online (Sandbox Code Playgroud)
我用来创建它的代码是:
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);
}
}
};
Run Code Online (Sandbox Code Playgroud)
我收到的错误跟踪是:
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
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法来解决这个问题,有人能看到这个问题吗?
谢谢
-Djava.security.policy接受指向策略文件的URL,该策略文件又包含权限.所以你应该:-Djava.security.policy=/some/path/my.policy作为my.policy文件包含的JVM参数:
grant {
permission java.security.AllPermission;
};
Run Code Online (Sandbox Code Playgroud)
此外,为了避免代码中存在NULL检查和手动创建a SecurityManager,您可以通过传递JVM开关来请求为您的应用程序自动安装SecurityManager : -Djava.security.manager.
您的最终JVM调用应如下所示:
java -Djava.security.manager -Djava.security.policy=/some/path/my.policy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5839 次 |
| 最近记录: |