Как удалить файл из файловой системы в системном событии XPages - PullRequest
2 голосов
/ 16 марта 2020

Я хочу удалить файл, но когда сеанс завершается, при попытке изменить файл из файловой системы я получаю исключение безопасности 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.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 ]

1 голос
/ 17 марта 2020

Я сделал быстрый тест, и все работало без проблем. ND9 & ND10.

Прослушиватель сеанса, удаление файла в «Session Destroyed» - событие, нет java .policy модификации.

РЕДАКТИРОВАТЬ: Ах, получил Это. Это не имеет ничего общего с удалением файла. Это проблема ClassLoader при доступе к классам в вашем NSF из события «Session Destroyed».

1 голос
/ 17 марта 2020

У вас есть 2 варианта:

  • Редактировать java .policy (или создать java .pol - не на 11.0)
  • Переместить ваш код в плагин osgi

На потом: не так страшно, как кажется. Ваш плагин будет жить в файле updatesite.nsf

Проверьте эту колоду для получения информации о начале.

...