2013-02-26 83 views
2

我正在使用java jar实现Google Drive API。我从这里找到的示例DriveCommandLine.java开始:https://developers.google.com/drive/quickstart-java。 XPage抛出以下内容: 调用java构造函数时出错...(java.lang.reflect.InvocationTargetException)。 不允许访问类中的成员java.util.AbstractMap使用Domino XPage实现Java Google Drive API时的安全问题

我知道Google java代码使用了反射,这是默认的Lotus Domino java.policy文件所不允许的。我测试了将默认权限更改为: permission java.security.AllPermission;

解决了安全问题。

我现在关心的是,不要让java.policy文件具有开放的默认权限。 我无法找到java.policy规范的文档... 有没有办法将这个权限缩小到需要它的特定代码?

感谢您的帮助

+0

http://docs.oracle.com/javase/6/docs/technotes/guides/security/permissions.html#ReflectPermission。我相信你想要的是java.lang.reflect.ReflectPermission。理解这在设置时存在安全隐患。 – 2013-02-26 13:20:08

回答

6

请尝试

grant { 
    permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; 
}; 

这样做可以使您的Java类的反射。

Alternativly你只能为一个单一的数据库限制策略设置:

grant codeBase "xspnsf://server:0/path/to/your/db.nsf/-" { 
    permission java.security.AllPermission; 
}; 

在此设置你必须改变路径到你的数据库(通过更换/路径/到/你/分贝。仅限于nsf/,而不是服务器:0)。

而不是将所有权限授予单个数据库,您可以将其限制为ReflectPermission。

+0

grant {0} {0} java.lang.reflect.ReflectPermission“suppressAccessChecks”; }; 没有工作。我想这是不够的,以掩盖的java.lang.reflect.InvocationTargetException – fenaten 2013-02-28 10:57:48

+0

使用: 授予codeBase“xspnsf:服务器:0 /测试/ GoogleDrive.nsf/- ”{权限java.security.AllPermission;}; 也没有工作。我想我缺少标点符号... 我在哪里可以找到适用于XPages的java.policy文件语法文档? – fenaten 2013-02-28 11:02:26

+0

@fenaten:您似乎忘记了xspnsf协议的斜杠(* xspnsf:// *)您可以在* Portable Command Guide *中找到文档。 – 2013-02-28 11:17:29