使用 Google GSON 的 Lotus Domino Java 安全问题

Posted

技术标签:

【中文标题】使用 Google GSON 的 Lotus Domino Java 安全问题【英文标题】:Lotus Domino Java security issue using Google GSON 【发布时间】:2013-04-11 13:20:28 【问题描述】:

尝试在通过 Xpage 启动的 java 方法中使用 Google GSON library。

我可以毫无问题地创建 gson 对象,但是在尝试调用 gson.toJson(jsonObj) 时出现以下错误:

HTTP JVM: java.lang.SecurityException: 不允许访问成员 在类 java.util.HashMap 中

HTTP JVM:在 lotus.notes.AgentSecurityManager.checkMemberAccess(Unknown Source)

HTTP JVM:在 java.lang.Class.checkMemberAccess(Class.java:112)

HTTP JVM:在 java.lang.Class.getDeclaredConstructor(Class.java:419)

代码:

HashMap<String, Object> jsonObj = new HashMap<String, Object>();
jsonObj.put("apiStatus", apiStatus);

Gson gson = new Gson();
String json = gson.toJson(jsonObj);  // Exception thrown on this line

我见过something similar here,但我已经实施了两个建议的政策更改,但似乎都没有任何效果:

授予 权限 java.lang.reflect.ReflectPermission "suppressAccessChecks"; ;

grant codeBase "xspnsf://server:0/path/to/your/db.nsf/-" 权限 java.security.AllPermission; ;

【问题讨论】:

【参考方案1】:

如果您不喜欢更新服务器文件系统上的安全文件,您可以避免使用 gson 并将其替换为 xpages 自己的 JSON 序列化程序,请参阅我的博客文章:

http://blog.tcl-digitrade.com/blogs/tcl-digitrade-blog.nsf/dx/28.01.2013090943DMABL6.htm

【讨论】:

谢谢大卫,我去看看。 Domino 8.5.2之后自带的包(我觉得)是com.ibm.commons.util.io.json。【参考方案2】:

这是几乎相同的例外:

Java Permission for Jackson on Domino XPage

使用

grant  permission java.security.AllPermission; ;

它应该与它一起工作。如果您不想让它保持打开状态,请检查grant codeBase 的语法:

在此设置中,您必须更改数据库的路径(通过 仅替换 /path/to/your/db.nsf/,不是服务器:0)。

【讨论】:

谢谢 Panu,我需要在最后一个斜线后面加上破折号吗? 我从来没有使用过这个,但是所有说明中都有破折号,所以我相信是的。

以上是关于使用 Google GSON 的 Lotus Domino Java 安全问题的主要内容,如果未能解决你的问题,请参考以下文章

google-gson库下的gson的基本使用

Gson的使用以及com.google.gson.JsonSyntaxException的解决方法

GSON的使用

Gson和fastJson的使用

Could not find class com.google.gson.Gson

使用Google的Gson实现对象和json字符串之间的转换