我遇到了 Java 安全问题。我有一个代理,它使用 pdfbox-1.7.1.jar 来解密我知道密码的 PDF。该 jar 已放置在服务器和我的客户端上的 /jvm/lib/ext 中,我得到了堆栈跟踪的这个小美:
java.lang.SecurityException
at java.lang.SecurityManager.checkPermission(SecurityManager.java:582)
at COM.ibm.JEmpower.applet.AppletSecurity.checkSecurityPermission(AppletSecurity.java:1332)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1613)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
at java.lang.SecurityManager.checkSecurityAccess(SecurityManager.java:1725)
at java.security.Security.insertProviderAt(Security.java:190)
at java.security.Security.addProvider(Security.java:210)
at org.apache.pdfbox.pdmodel.encryption.SecurityHandlersManager.getInstance(SecurityHandlersManager.java:146)
at org.apache.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:1365)
at org.apache.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:798)
at com.magerman.hremail.prep1docc.PDFDecryptor.decrypt(Unknown Source)
at com.magerman.hremail.prep1docc.MetaAttachment.decrypt(Unknown Source)
at com.magerman.hremail.prep1docc.MetaDocContainingAttachments.removePasswordOfPDFAttachments(Unknown Source)
at com.magerman.hremail.prep1docc.EPDFPreparerFactory.generateAttachmentsTriggerDocs(Unknown Source)
at com.magerman.hremail.prep1docc.EPDFPreparerFactory.run(Unknown Source)
at com.magerman.hremail.prep1docc.BaseClass.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
客户端和服务器都使用 8.5.3。代理安全级别设置为 3。将罐子放入代理本身并没有帮助。代理的签名者是服务器上的完全管理员。安全异常似乎指向“insertProviderAt”
这是我尝试过的:
推杆
grant {
permission java.security.AllPermission;
}
解决了我的问题,但我永远不会通过我的鹰眼管理员。
我试图将权限范围缩小到数据库,但这里的文档:http: //docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html并没有真正告诉我如何输入笔记数据库。
我在这里查看了 Stephan Wissel 关于 Xpages Java 安全性的文章:http: //www.wissel.net/blog/d6plinks/SHWL-8JYAT5并将以下内容插入到我的 /jvm/lib/security/java.policy 文件中:
grant codeBase "xspnsf://server:0/development/hre-mail/hre-mail2_0/hre-mail_(2_0)_dev.nsf/-" {
permission java.security.AllPermission;
};
但这也不起作用,我想是因为我的 codeBase 语法对 nsf 数据库无效,但仅对网页有效。
我还试图将权限减少到真正需要的权限,并查看此处的文档:http: //docs.oracle.com/javase/1.4.2/docs/guide/security/permissions.html
意味着我必须做类似的事情
java.security.SecurityPermission "insertProvider.{name}"
但我不知道 {name} 应该是什么。
我还阅读了 Mikkel 在http://lekkimworld.com/2013/06/20/java_in_notes_domino_explained_on_java_security_and_how_it_relates_to_notes_domino.html上的文章
但我的大脑在页面中间左右发火。特别是,我不确定如何实际实现此方法。你能牵着我的手带我过去吗?
虽然我正在这样做,但我是否正确地假设每当我将新 jar 放入 /jvm/lib/ext 中时,我需要做的就是
tell http restart
让JVM重新加载?我假设 Domino 为 Xpages、代理和 HTTP 任务使用单个 JVM,这是正确的。
另外,我是否需要重新启动服务器才能使 java.policy 中的任何新策略生效?
有任何想法吗?