java - 如何在 XPage 系统事件中从文件系统中删除文件

标签 java xpages

我想在 session 终止时删除文件,但是,当尝试从文件系统修改文件时,我收到 Notes 安全异常。

这是我尝试过的:

File f = getSourceFile();    
f.delete(); // java.lang.SecurityException: Zugriff auf die Datei {0} bzw. diese zu ändern ist nicht zulässig (Accessing or modifiying this File is prohibited)

FileUtils.clearFile(f); // java.lang.IllegalStateException: NotesContext is not initialized for the Thread 

这就是我检索文件的方式:

public File getSourceFile() {
    return new File(this.absolutePath);
}

我也尝试使用 doPrivileged 但这导致了相同的 IllegalStateException:

AccessController.doPrivileged(new PrivilegedAction() { // java.lang.IllegalStateException: NotesContext is not initialized for the Thread
    public Object run() {   
        File f = getSourceFile();
            if(f.exists()){
                FileUtil.deleteFile(f);
            }
    }
});

我想以某种方式重新初始化 NotesContext 是可能的,但我认为这不是一个优雅的解决方案。

堆栈跟踪:

(非法状态)

java.lang.IllegalStateException: NotesContext not initialized for the thread
at com.ibm.domino.xsp.module.nsf.NotesContext.getCurrent(NotesContext.java:123)
at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.findClass(ModuleClassLoader.java:438)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:924)
at java.lang.ClassLoader.loadClass(ClassLoader.java:869)
at com.ibm.domino.xsp.module.nsf.ModuleClassLoader$DynamicClassLoader.loadClass(ModuleClassLoader.java:403)
at java.lang.ClassLoader.loadClass(ClassLoader.java:852)
at de.iV.beans.ticket.file.FileWrapper.clear(FileWrapper.java:90)
at de.iV.beans.ticket.Ticket.clearFiles(Ticket.java:155)
at de.iV.session.CustomSessionListener.sessionDestroyed(CustomSessionListener.java:46)
at com.ibm.xsp.application.ApplicationSessionListener.sessionDestroyed(ApplicationSessionListener.java:53)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.notifySessionRemoved(ComponentModule.java:370)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.checkSessionTimeout(ComponentModule.java:239)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.checkTimeout(NSFComponentModule.java:213)
at com.ibm.domino.xsp.module.nsf.NSFService.checkTimeout(NSFService.java:281)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.checkTimeout(LCDEnvironment.java:247)
at com.ibm.designer.runtime.domino.bootstrap.BootstrapEnvironment.tellCommand(BootstrapEnvironment.java:388)
at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.tell(XspCmdManager.java:92

(安全)

    java.lang.SecurityException: Zugriff auf die Datei {0} bzw. diese zu ändern ist nicht zulässig
at lotus.notes.AgentSecurityManager.checkDelete(Unknown Source)
at java.io.File.delete(File.java:1047)
at de.iV.beans.ticket.file.FileWrapper.clear(FileWrapper.java:94)
at de.iV.beans.ticket.Ticket.clearFiles(Ticket.java:155)
at de.iV.session.CustomSessionListener.sessionDestroyed(CustomSessionListener.java:46)
at com.ibm.xsp.application.ApplicationSessionListener.sessionDestroyed(ApplicationSessionListener.java:53)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.notifySessionRemoved(ComponentModule.java:370)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.checkSessionTimeout(ComponentModule.java:239)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.checkTimeout(NSFComponentModule.java:213)
at com.ibm.domino.xsp.module.nsf.NSFService.checkTimeout(NSFService.java:281)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.checkTimeout(LCDEnvironment.java:247)
at com.ibm.designer.runtime.domino.bootstrap.BootstrapEnvironment.tellCommand(BootstrapEnvironment.java:388)
at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.tell(XspCmdManager.java:92)

我无法找到解决方法。

最佳答案

您有 2 个选择:

  • 编辑 java.policy(或创建 java.pol - 不适用于 11.0)
  • 将代码移至 osgi 插件

对于后者:它并不像听起来那么可怕。您的插件将位于 updatesite.nsf 中

检查this deck了解入门信息。

关于java - 如何在 XPage 系统事件中从文件系统中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60705331/

相关文章:

java - 一个 "if"语句中范围内的任一整数

java - 状态模式 : States as Hibernate singleton entities

java - 在保留完整单词的同时在 Java 中修剪字符串

java - 通过 Notes-UpdateSite 数据库将 jar 部署到 Domino 服务器,以 NoClassDefFoundException 结尾

javascript - 在 xPages 部分刷新的自定义控件中加载 javascript 资源

java - (Java/Junit)我设置了类路径,现在无法在命令提示符下编译测试文件

java - 使用多线程并行执行求解网格大小大于 9*9 的数独

html - 如何使用 HTML 5 使 XPages 应用程序脱机工作

javascript - 将重复控件绑定(bind)到 session 或 View 范围变量