客户端策略:访问被拒绝:java.net.SocketPermission 127.0.0.1:1099

时间:2014-05-05 21:44:39

标签: java security permissions classloader rmi

我有一个奇怪的错误:

我的代码:

System.setProperty("java.security.policy", "client.policy");
System.setProperty("java.rmi.server.codebase", Servicecodebase);
System.setSecurityManager(new RMISecurityManager()); 

    Class<?> InterfaceMath =  RMIClassLoader.loadClass("http://127.0.0.1/dis/service.jar", "Service.InterfaceMath");



    Remote service = null;                  
     service  = Naming.lookup("rmi://127.0.0.1:1099/ok"); //  Error Message here
    Method getInformation = service.getClass().getDeclaredMethod("test", String.class);
    String res = (String) getInformation.invoke(service);
     System.out.println(" res : "+res);

我的文件client.policy:

grant {
    permission java.security.AllPermission;
    permission java.net.SocketPermission "localhost:1099", "connect, resolve";
    permission java.net.SocketPermission "127.0.0.1:1099", "connect, resolve";
    permission java.net.SocketPermission "localhost:80", "connect, resolve";
};

我的错误:

java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")

我在运行配置中使用Eclipse - VM Arguments -Djava.security.policy == client.policy 而且lanch ---在控制台上启动rmiregistry。

这很奇怪,因为我配置了我的文件,我加载了我的界面,但我无法与我的RMI通信。服务器我不知道为什么会遇到这个问题。

更新: 我的项目ClientRMI:

  1. src
  2. (默认包裹)
  3. consumerTest.java
  4. client.policy

1 个答案:

答案 0 :(得分:1)

显然找不到该文件。由于您只将其指定为“client.policy”,因此在程序启动时它必须位于当前工作目录中。

如果您使用

运行它
-Djava.security.debug=access,failure

您将获得非常完整的安全管理器故障跟踪,包括当时生效的安全域以及配置它的.policy文件。