10

我遇到了一些麻烦——实际上很多——试图弄清楚如何让 NetBeans 读取我的特定应用程序的策略文件。请看下面的代码:

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

无论我做什么,我都会不断收到以下错误,这让我知道 NetBeans 没有读取我的 security.policy 文件(我什至将它的位置添加到了 中的主 security.policy 文件中C:\Program Files (x86)\Java\jre6\lib\security\java.security)。顺便说一句,第 20 行是我尝试设置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)

非常感谢任何和所有帮助!

4

4 回答 4

18

如果您使用该System.setProperty()方法添加策略文件,请确保在创建SecurityManager. 我以前使用SecurityManager过该方法,并在创建一般作品System.setProperty()之前调用它。SecurityManager

于 2012-03-21T16:13:08.247 回答
16

设置特定安全策略的最简单方法是通过运行时参数。例如,这就是我们在这里针对同样的问题所做的:

  1. 打开“项目属性->运行”
  2. 选择您的运行时配置
  3. 编辑运行时配置的“VM 选项”
  4. 添加以下内容:

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

src/dir1/dir2/important.policy将在示例中更改为指向您的文件的位置JAASTest.policy

于 2011-05-19T16:37:44.243 回答
5

在设置系统安全管理器之前添加安全策略。

根据您给定的代码首先添加

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

然后

System.setSecurityManager(new SecurityManager());
于 2015-06-30T06:37:51.207 回答
0

虽然它并不理想,也不是一个确定的解决方案,但从 .class 文件所在的位置运行“rmiregistry &”可以解决这个问题。

于 2015-11-16T17:36:33.953 回答