使用 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 安全问题的主要内容,如果未能解决你的问题,请参考以下文章
Gson的使用以及com.google.gson.JsonSyntaxException的解决方法