主要授权之外的java.policy设置不适用于Apache POI jar

时间:2013-02-16 20:10:59

标签: java jar apache-poi xpages lotus-domino

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

如果我放置"权限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;
};

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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刚刚在他的博客中概述了the solution(总值得一读)。

我会将额外的库打包到我自己的extension library中,因此可以使用updatesite.nsf(投资books)进行部署。

答案 1 :(得分:1)

我正在将它用于POI:

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

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

  

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

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

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