【问题标题】:rmi java.security.policy access deniedrmi java.security.policy 访问被拒绝
【发布时间】:2015-01-21 15:40:39
【问题描述】:

我是 Java 中 RMI 主题的新手,我想使用 RMI 创建客户端服务器应用程序,

我按照此链接中的教程进行操作:RMI Tutorial using eclipse

但我使用的是 netbeans,这里是服务器代码:

import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.*;   

public class AdditionServer {
       public static void main (String[] argv) {
           try {
               if (System.getSecurityManager() == null)
                            {
                                System.setSecurityManager(new SecurityManager());
                            }   
                           String policy="file:/home/user/NetBeansProjects/RMIServerSide/security.policy";

                           System.setProperty("java.security.policy",policy);

               Addition Hello = new Addition();

                                    System.out.println("test\n");
                            Registry reg=LocateRegistry.createRegistry(1099);

               reg.rebind("rmi://localhost/ABC", Hello);

               System.out.println("Addition Server is ready.");
               }catch (Exception e) {
                   System.out.println("Addition Server failed: " + e);
                }
           }
}

这里是security.policy:

grant codeBase "/home/user/NetBeansProjects/RMIServerSide/build/classes/" {
    permission java.security.AllPermission;
};

然后我在终端中运行 rmiregistry &。 然后我运行服务器,这里的输出到底是什么:

Addition Server failed: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.security.policy" "write")

有什么我想念的吗,比如 vm 的配置什么的???.....

【问题讨论】:

    标签: java permissions rmi server


    【解决方案1】:

    我遇到了同样的问题。我已按照以下步骤修复它:

    1. 我创建了一个策略文件,我将它命名为security.policy

    内容如下

    grant {
        // Allow everything for now
        permission java.security.AllPermission;
    };
    

    2- 在将远程对象绑定到rmiregistry 之前添加以下代码行。

    System.setProperty("java.security.policy","file:./security.policy");

    【讨论】:

    • 除非您还设置了安全管理器,否则您必须在设置策略和绑定之前设置它,否则效果为零,因此显然您没有。无论如何,使用安全管理器设置 AllPermission 是毫无意义的。
    【解决方案2】:

    您需要在安装SecurityManager.之前设置策略文件

    【讨论】:

    • 谢谢...我按照你的说法更改了代码,但是触发了新的异常:java.security.policy:添加条目时出错:java.net.MalformedURLException:没有协议:/home/user/ NetBeansProjects/RMIServerSide/
    • 您必须删除了file: 部分。否则它指的是策略文件中的某些内容,例如代码库条目,它应该是一个 URL。
    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 2012-10-17
    • 2018-05-01
    • 2013-09-30
    • 2010-09-15
    • 2019-04-14
    • 2015-08-13
    相关资源
    最近更新 更多