Java 如何从NetBeans中为特定应用程序设置security.policy文件?

Java 如何从NetBeans中为特定应用程序设置security.policy文件?,java,netbeans,security-policy,Java,Netbeans,Security Policy,我在试图弄清楚如何让NetBeans读取特定应用程序的策略文件时遇到了一些麻烦,实际上是很多麻烦。请查看以下代码: public static void main(final String[] args) { System.setSecurityManager(new SecurityManager()); System.setProperty("java.security.policy","file:/C:/Users/kBPer

我在试图弄清楚如何让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文件,我甚至将它的位置添加到C:\Program Files x86\Java\jre6\lib\security\Java.security中的主security.policy文件中。顺便说一下,第20行是我尝试设置System.setPropertyjava.security.policy的地方


非常感谢您的任何帮助

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

打开项目属性->运行 选择您的运行时配置 编辑运行时配置的VM选项 添加以下内容:

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


示例中将src/dir1/dir2/important.policy更改为指向文件JAASTest.policy。

如果使用System.setProperty方法添加策略文件,请确保它在创建SecurityManager之前。我以前在System.setProperty方法中使用过SecurityManager,并在创建SecurityManager之前调用它。

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

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

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


虽然它并不理想,也不是一个最终的解决方案,但从.class文件所在的位置运行rmiregistry,将解决此问题。

当我这样做时,它会生成一条稍微不同的错误消息:线程主java.security.AccessControlException中的异常:java.lang.RuntimePermission中的access denied java.lang.RuntimePermission createSecurityManager位于java.security.AccessControlContext.checkPermissionAccessControlContext.java:323在java.security.AccessController.checkPermissionAccessController.java:546在java.lang.SecurityManager.checkPermissionSecurityManager.java:532在java.lang.SecurityManager.SecurityManager.java:282在JAASTest.mainJAASTest.java:19显然,现在它不喜欢我的安全管理器声明了?想象一下:你知道吗,一旦我删除了以下行:System.setPropertyjava.security.policy,file:/C:/Users/kBPersonal/Documents/NetBeansProjects/JAASTest/JAASTest.policy;它至少正在读取我的JAASTest.policy文件,然后我的框架出现了。我想试图弄清楚为什么它仍然没有给我所需要的访问权限是另一个问题的主题!谢谢你,鲍勃!是否有任何方法可以检查给定的策略文件是否由安全管理器执行,或者如何确保给定的策略文件已由安全管理器执行我的安装程序openjdk 13.0.1,我必须在setProperty之后调用Policy.getPolicy.refresh才能将其纳入帐户是否有任何方法可以检查给定的策略文件是否由安全管理器执行,或者,我们如何确保安全管理器考虑了给定的策略文件?您可以通过键java.security.policy检查系统属性,查看是否设置了该属性。如果未设置,则返回null。按照这行字符串prop=System.getPropertyjava.security.policy;在我的安装程序openjdk 13.0.1中,我必须在setProperty之后调用Policy.getPolicy.refresh才能将其考虑在内
System.setProperty("java.security.policy","file:/C:/Users/kBPersonal/Documents/NetBeansProjects/JAASTest/JAASTest.policy");
System.setSecurityManager(new SecurityManager());