main 中的错误 - java.security.AccessControlException: 访问被拒绝 ( "java.net.SocketPermission" "127.0.0.1:109



我一直在尝试运行RMI示例,但在linux和windows上都遇到了上述错误。我在网上见过有同样问题的人,但情况不同。

我的服务器类是:

import java.rmi.*;
import java.rmi.server.*;
public class CityServerImpl extends UnicastRemoteObject implements CityServer {
    CityServerImpl() throws RemoteException {
        super();
    }
    public String getCapital(String country) throws RemoteException {
        System.out.println("Sending return string now - country requested: " + country);
        if (country.toLowerCase().compareTo("usa") == 0)
            return "Washington";
        else if(country.toLowerCase().compareTo("ireland") == 0)
            return "Dublin";
        else if (country.toLowerCase().compareTo("france") == 0)
            return "Paris";
        return "Don't know that one!";
    }
    public static void main(String args[]) {
        try {
            System.setSecurityManager(new RMISecurityManager());
            System.out.println("Security manager set");
            CityServerImpl cityServer = new CityServerImpl();
            System.out.println("Instance of City Server created");
            Naming.rebind("Capitals", cityServer);
            System.out.println("Name rebind completed");
            System.out.println("Server ready for requests!");
        } catch(Exception exc) {
            System.out.println("Error in main - " + exc.toString());
        }
    }
}

我将接口、CityServer类和我的客户端类放入一个文件夹中,并将以下内容放入终端中。

javac -cp . *.java
rmic CityServerImpl
rmiregistry &
java CityServerImpl

我回来了:

Security manager set
Instance of City Server created
Error in main - java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")

'Naming.rebind("Capitals",cityServer);'似乎是问题所在。我发现有人提到了一份政策文件,但有人告诉我,如果没有政策文件,这应该没问题。客户端和服务器都将在同一台电脑上运行。你知道如何绕过这一点吗?

您定义了RMISecurityManager,但没有授予自己执行代码的权限。您可以按照此处指定的方式定义策略,并通过以下两种方式之一进行传递。

  1. java-Djava.security.policy=<path>
  2. 将此设置为您的代码System.setProperty("java.security.policy","<path>");

我建议阅读oracle的这篇教程。

这应该是一个老问题的复制件。

相关内容

  • 没有找到相关文章

最新更新