Mike
Mike

Reputation: 1610

How do I set the security.policy file for a specific application from within NetBeans?

I am having a bit of trouble -- a lot actually -- trying to figure out how get NetBeans to read my policy file for a particular application. Please take a look at the below code:

      public static void main(final String[] args)
      {
          System.setSecurityManager(new SecurityManager());
          System.setProperty("java.security.policy","file:/C:/Users/kBPersonal/Documents/NetBeansProjects/JAASTest/JAASTest.policy");

          EventQueue.invokeLater(new Runnable()
          {
              public void run()
              {
                  JFrame frame = new JAASFrame();
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  frame.setVisible(true);
              }
          });
      }

No matter what I do I keep getting the following error which lets me know that NetBeans is not reading my security.policy file (I even added it's location to the main security.policy file in the C:\Program Files (x86)\Java\jre6\lib\security\java.security). Incidentally, line 20 is where I try to set the System.setProperty("java.security.policy, ...)

     Exception in thread "main" java.security.AccessControlException: access denied (java.util.PropertyPermission java.security.policy write)
     at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
     at java.security.AccessController.checkPermission(AccessController.java:546)
     at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
     at java.lang.System.setProperty(System.java:725)
     at JAASTest.main(JAASTest.java:20)

Any and all help is greatly appreciated!

Upvotes: 10

Views: 58397

Answers (4)

Euphobia
Euphobia

Reputation: 181

If you're using the System.setProperty() method to add your policy file, then make sure it's before you create the SecurityManager. I've used SecurityManager before with the System.setProperty() method, and calling it before I create the SecurityManager generally works.

Upvotes: 18

Bob Cross
Bob Cross

Reputation: 22292

The easiest way to set a specific security policy is via a runtime argument. For example, this is what we do here for the same problem:

  1. Open "Project Properties -> Run"
  2. Select your runtime configuration
  3. Edit the "VM Options" for the runtime configuration
  4. Add the following:

    -Djava.security.manager -Djava.security.policy=src/dir1/dir2/important.policy

where you src/dir1/dir2/important.policy would be changed in your example to point at your file JAASTest.policy.

Upvotes: 18

iammyr
iammyr

Reputation: 271

Although it's not ideal and it's not a definitive solution, running "rmiregistry &" from the location where your .class files reside, would solve this issue.

Upvotes: 0

Ataur Rahman Munna
Ataur Rahman Munna

Reputation: 3917

Add security policy before setting your system security manager.

according to your given code first add

System.setProperty("java.security.policy","file:/C:/Users/kBPersonal/Documents/NetBeansProjects/JAASTest/JAASTest.policy");

then

System.setSecurityManager(new SecurityManager());

Upvotes: 5

Related Questions