0

我已经在 Domino 服务器上的 jvm/lib/ext 文件夹中放置了一些 jar,以便在我的数据库中的某些类中使用。一切正常,除了安全。

如果我放置“permission java.security.AllPermission;” (没有引号)在我对 java.policy 的主要授权中,一切正常,但是如果我尝试将其缩小为仅针对具有类的数据库和 ext 文件夹中的 jar 的单独授权,我会收到各种安全例外。例如,我收到一个反射异常,因为其中一个 jar 正在执行反射。

以下是我尝试在文件中一起使用的两个单独的授权:

grant codeBase "file:/C:/path_to_domino_server_program_directory/jvm/lib/ext/-" {
     permission java.security.AllPermission;
}
grant codeBase "xspnsf://server:0/path_to_database/database.nsf/-" { 
     permission java.security.AllPermission;
};

任何帮助,将不胜感激。

4

2 回答 2

2

您不应该触摸 /lib/ext 的权限,因为它们已经在默认策略文件中:

 // Standard extensions get all permissions by default
 grant codeBase "file:${java.home}/lib/ext/*" {
       permission java.security.AllPermission;
 };

所以图书馆已经拥有所有权利。但正如 Thimo 指出的那样:类加载器可能会妨碍您。您可能需要查看源头并检查麻烦制造者。主要候选人是反射使用。

对于 Apache POI,需要相当长的一段时间。Christian 刚刚在他的博客中概述了解决方案(总是值得一读)。

我会将额外的库打包到我自己的扩展库中,因此可以使用 updatesite.nsf(投资书籍)来部署它。

于 2013-02-18T09:11:16.863 回答
1

我将其用于 POI:

grant { 
  permission java.lang.RuntimePermission "getClassLoader"; 
}

根据您所做的事情,您可能还需要其他一些权限,但我认为授予所有权限并不是一个好主意。当然,如果您可以将权限限制为仅一个 NSF 就更好了,但这似乎很麻烦。我不确定您应该为服务器使用什么,但如果我理解正确,它应该是“服务器”,而不是您的服务器名称:

你只需要改变你的database.nsf,其他部分是静态的,目录分隔符是/不管平台,位置是相对于数据目录的,整个codeBase值必须是小写的(不管你的文件名)。

您也可以尝试从 jvm/ext 中删除 JAR 并将它们存储到 NSF WEB-INF 以确保它们使用 NSF 权限。

请注意,更改 java.policy 文件(您可能已经知道)后需要重新启动 HTTP。

于 2013-02-18T10:08:58.590 回答