【问题标题】:Error in main - java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve") [duplicate]主要错误-java.security.AccessControlException:访问被拒绝(“java.net.SocketPermission”“127.0.0.1:1099”“connect,resolve”)[重复]
【发布时间】:2014-10-11 19:27:31
【问题描述】:

我一直在尝试运行 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);'似乎是问题所在。我发现提到了一个策略文件,但有人告诉我,如果没有这个文件应该可以正常运行。客户端和服务器都将在同一台 PC 上运行。关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: java rmi


    【解决方案1】:

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

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

    我建议阅读 oracle 的this tutorial

    这应该是 old question. 的副本

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 1970-01-01
      • 2015-08-13
      • 2014-09-24
      • 2023-03-16
      • 1970-01-01
      • 2015-09-11
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多