我已将一些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;
};
任何帮助都将不胜感激。
答案 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。