rmi java.security.policy access denied

2019-09-04 05:23发布

问题:

I am new to RMI topic in java and i wana to create client server applicaiton using RMI,

i followed this tutorial found in this link : RMI Tutorial using eclipse

but i am using netbeans ,and here is server code:

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);
                }
           }
}

and here security.policy :

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

then i run the rmiregistry & in the terminal. then i run the server and here what is the output exactly :

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

Is there something i miss it, like a config for vm or something ???.....

回答1:

I had the same problem. I have fixed it following these steps:

  1. I have created a policy file, I named it security.policy

with the following content

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

2- Add the following line of code just before binding the remote object to the rmiregistry.

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



回答2:

You need to set the policy file before you install the SecurityManager.