我正在构建一个RMI应用程序,我有以下服务器类。但是,当我在eclipse中运行它时,我得到以下异常。有什么问题,我该如何解决?我花了最近两天在线阅读类似的问题,但我找不到解决方案。我怀疑它与策略文件有关,但我不知道如何使用它。此外,如果问题与我的运行方式有关,请你在eclipse中给我这样做的指示。
PivotFields("[Fiscal Period].[Year].[Year]")
-
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.rmi.ssl.SslRMIServerSocketFactory;
public class MyServer extends UnicastRemoteObject implements Interface {
private static final int PORT = 2019;
public MyServer() throws Exception {
super(PORT, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
}
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
Registry registry = LocateRegistry.createRegistry(PORT, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
MyServer obj = new MyServer();
registry.bind("HelloServer", obj);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
@Override
public void sayHello() throws RemoteException {
System.out.println("Hello");
}
}
答案 0 :(得分:1)
这很简单。
access denied ("java.net.SocketPermission" "localhost:2019" "listen,resolve")
表示策略文件必须授予权限
java.net.SocketPermission "localhost:2019", "listen,resolve"
或任何正确的语法。使用policytool
将其弄清楚。您可能想要通配符端口号。您必须通过java.security.policy
系统属性指定策略文件的位置。当您获得其他访问控制异常时,就像在测试中一样,您必须同样添加相应的权限,直到关闭。
但我宁愿问你为什么要使用安全管理器。除非您打算使用代码库功能,这是非常罕见的,除非您打算使用代码库功能从客户端上传类,否则它不需要在服务器中使用。罕见。