java.security.AccessControlException:Java RMI电话目录中的访问被拒绝

时间:2015-03-17 10:22:45

标签: java rmi

我通过互联网获得了这个来源,用于我的学术任务目的。它只是Java RMI的实用性。在这里,我发布了我的服务器文件的代码。

   import java.io.*;
   import java.util.*;
   import java.rmi.*;
   import java.rmi.server.*;

   public class LookupServer extends UnicastRemoteObject implements Lookup {
      private Vector save = new Vector();

      public LookupServer(String db) throws RemoteException
      {
         try {
            FileReader fr = new FileReader(db);
            BufferedReader br = new BufferedReader(fr);
            String s = null;
            while ((s = br.readLine()) != null)
               save.addElement(s);
            fr.close();        
         }
         catch (Throwable e) {
            System.err.println("Exception in Lookupserver():"+e);
            System.exit(1);
         }
      }

      public String findInfo(String info)
      {
         if (info == null)
         return null;

         info = info.toLowerCase();
         int n = save.size();
         for (int i = 0; i < n; i++) {
            String dbs = (String)save.elementAt(i);
            if (dbs.toLowerCase().indexOf(info) != -1)
            return dbs;
         }

         return null;
      }

      public static void main(String args[])
      {
         try {
             RMISecurityManager security = new RMISecurityManager();

             System.setSecurityManager(security);

             String db = args[0];

             LookupServer server = new LookupServer(db);

             Naming.rebind("LookupServer", server);
             System.err.println("LookupServer ready...");
         }
         catch (Throwable e) {
            System.err.println("Exception in main: " + e);
            System.exit(1);
         }
      }
}

我的政策文件(policy.policy)包含

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

现在我被困在:

C:/&gt; java LookupServer Database.txt java.security.policy = policy.policy

main中的异常:java.security.AccessControlException:拒绝访问(java.net.SocketPermission 127.0.0.1:1099 connect,resolve)

请帮助我......!

2 个答案:

答案 0 :(得分:1)

策略文件应作为属性传递,-D不作为参数

C:/>java -Djava.security.policy=policy.policy LookupServer Database.txt 

答案 1 :(得分:0)

谢谢亲爱的

实际上我已经阅读了几个ppts和pdfs的RMI,我开始了解运行和编译程序。几乎所有文档都建议我将-D作为属性传递而不是参数。但当我这样做时,它给了我一个访问异常的错误信息。然后我将我的策略文件放在我的C盘中并使用命令

C:/&gt; java -Djava.security.policy = C:/policy.policy LookupServer Database.txt

它工作了...... :)我的RMI应用程序运行成功。谢谢你的回复。