0

我在我的应用程序中使用 Java 安全管理器。我正在授予权限,我遇到了一个我似乎无法授予的权限。它是加载库的权限。它是 $JAVA_HOME/lib/ext 目录中的 java *.jar 库。

at com.theatsgroup.startup.startup_managers.startup(startup_managers.jav
a:98)
at com.theatsgroup.startup.app_startup.main(app_startup.java:357)
Caused by: java.security.AccessControlException: access denied ("java.lang.Runti
mePermission" "loadLibrary.sunec")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)

我的授权文件如下:

grant codeBase "file:../bin/atsapp.jar" {
permission java.lang.RuntimePermission "loadLibrary.sunec";
};

下面是我如何调用我的 Java 应用程序:

java -Djava.security.manager -Djava.security.policy==..\cfg\atsapp.security.poli
cy -jar atsapp.jar

有任何想法吗?

谢谢,

——贾斯汀

4

1 回答 1

1

由于您使用的是“==”,因此您将覆盖 jvm 的“默认”权限。为了让 jvm 工作,您很可能需要在策略文件中复制一项重要的默认授权。此权限授予作为 jvm 一部分安装的所有扩展库所需的权限,以执行所有“内部”工作。不知道为什么这不是内置的,因为没有这个 jvm 不能做很多事情。

grant codeBase "file:${{java.ext.dirs}}/*" {
  permission java.security.AllPermission;
};

这是从与 jre 一起安装的“lib/security/java.policy”文件的开头开始的。您可能需要调查此文件的其余部分,以查看您是否需要其他重要的基本权限。

于 2013-01-19T03:46:34.170 回答