Search the FirstSpirit Knowledge Base
Hallo zusammen,
ich würde gern mit Hilfe der Auftragsverwaltung einen Task anlegen, welcher eine zeitlich gesteuerte Aktualisierung einer JSON-Datei im Mediastore realisiert. Für diesen Zweck habe ich ein kleines Plugin entwickelt, welches ich als Bibliothek serverweit bekannt gemacht habe. Den Aufruf der Bibliothek habe ich mittels Beanshell Skript getestet und konnte damit verifizieren, dass die Bibliothek das tut was sie soll.
Wenn ich jetzt allerdings versuche das Ganze in der Auftragsverwaltung meines Projektes als Aktion auszuführen, kommt es zu einer SecurtyException.
Nachfolgend einmal der (scheinbar) problematische Code und Fehlerlog:
ScheduleContext scheduleContext = (ScheduleContext) context;
StoreAgent storeAgent = context.requestSpecialist(StoreAgent.TYPE);
if (storeAgent != null) {
Store mediaStore = storeAgent.getStore(Store.Type.MEDIASTORE);
MediaImpl medium = (MediaImpl) mediaStore.getStoreElement(jsonMediaId, IDProvider.UidType.MEDIASTORE_LEAF);
{...}
medium.setLock(true, false);
de.espirit.firstspirit.access.store.mediastore.File mFile = medium.getFile(scheduleContext.getProject().getMasterLanguage());
mFile.setFile(jsonTempFile.length(), fis, "json");
medium.setParseFile(false);
medium.save("Aktualisierte JSON-Menüstuktur", false);
medium.setLock(false, false);
{...}
}
ERROR
[–] 04.03.2021 16:06:50 ERROR 04.03.2021 16:06:50.648 {uID=0,seID=145005,pID=113297} (de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor): error during script execution : de.espirit.firstspirit.access.script.ExecutionException: Method Invocation execute : at Line: 4 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.adesso.firstspirit.intranet.maginal.Intrane . . . '' : .execute ( context )
Called from method: __execute
Target exception: java.lang.SecurityException: changes not allowed for current connection
at line 4
FSVersion=5.2.190910.78562;JDK=11.0.6 64bit Oracle Corporation;OS=Linux 3.10.0-1160.6.1.el7.x86_64 amd64;Date=04.03.2021 16:06:50 (I)
de.espirit.firstspirit.access.script.ExecutionException: Method Invocation execute : at Line: 4 : in file: inline evaluation of: ``__execute() { //!Beanshell import de.adesso.firstspirit.intranet.maginal.Intrane . . . '' : .execute ( context )
Called from method: __execute
Target exception: java.lang.SecurityException: changes not allowed for current connection
at line 4
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:109)
at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.lambda$execute$1(PermissionsScriptEngine.java:83)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:88)
at de.espirit.firstspirit.server.script.PermissionsScriptEngine$PermissionsExecutable.execute(PermissionsScriptEngine.java:83)
at de.espirit.firstspirit.common.ScriptUtil.execute(ScriptUtil.java:106)
at de.espirit.firstspirit.server.scheduler.ScriptTaskExecutor.run(ScriptTaskExecutor.java:127)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2506)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.executeLocal(ScheduleManagerImpl.java:2489)
at de.espirit.firstspirit.server.scheduler.ScheduleManagerImpl$TaskCallable.call(ScheduleManagerImpl.java:2421)
at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:590)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:436)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:56)
Caused by: java.lang.SecurityException: changes not allowed for current connection
at de.espirit.firstspirit.server.scheduler.RestrictedTaskSecurityManager.checkAccess(RestrictedTaskSecurityManager.java:29)
at de.espirit.firstspirit.store.access.AbstractStoreElement.checkAccess(AbstractStoreElement.java:1443)
at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:449)
at de.espirit.firstspirit.store.access.DefaultStoreElement.setLock(DefaultStoreElement.java:441)
at de.adesso.firstspirit.intranet.maginal.IntranetMaginalJsonCreatorExecutable.writeToMediastore(IntranetMaginalJsonCreatorExecutable.java:104)
at de.adesso.firstspirit.intranet.maginal.IntranetMaginalJsonCreatorExecutable.execute(IntranetMaginalJsonCreatorExecutable.java:47)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at bsh.Reflect.invokeMethod(Reflect.java:185)
at bsh.Reflect.invokeObjectMethod(Reflect.java:118)
at bsh.BSHPrimarySuffix.doName(BSHPrimarySuffix.java:176)
at bsh.BSHPrimarySuffix.doSuffix(BSHPrimarySuffix.java:120)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:80)
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
at bsh.BSHBlock.eval(BSHBlock.java:80)
at bsh.BshMethod.invokeImpl(BshMethod.java:371)
at bsh.BshMethod.invoke(BshMethod.java:267)
at bsh.BshMethod.invoke(BshMethod.java:170)
at bsh.PreparsedScript.invoke(PreparsedScript.java:66)
at de.espirit.firstspirit.server.script.BeanshellScriptEngine$BeanshellExecutable.execute(BeanshellScriptEngine.java:100)
... 18 more
Gibt es etwas, was ich zur Realisierung meines Vorhabens noch beachten muss oder ist das eventuell einfach nicht möglich?
Vielen Dank schon mal für eure Hilfe!
Viele Grüße
Richard
Hallo Richard,
die Fehlermeldung "changes not allowed for current connection" deutet darauf hin, dass Du versuchst, die Änderungen mit der Session des Auftrags direkt durchzuführen. Das wird unterbunden.
Lösung: In der Skript-Aktion unter Eigenschaften den Haken "Eigene Verbindung" aktivieren und die Zugangsdaten von einem Benutzer verwenden, der ausreichend Rechte hat, um die entsprechenden Änderungen durchzuführen:
Viele Grüße
Holger
Hallo Richard,
die Fehlermeldung "changes not allowed for current connection" deutet darauf hin, dass Du versuchst, die Änderungen mit der Session des Auftrags direkt durchzuführen. Das wird unterbunden.
Lösung: In der Skript-Aktion unter Eigenschaften den Haken "Eigene Verbindung" aktivieren und die Zugangsdaten von einem Benutzer verwenden, der ausreichend Rechte hat, um die entsprechenden Änderungen durchzuführen:
Viele Grüße
Holger
Hallo Holger,
tausend Dank für die schnelle Hilfe! Daran hat es tatsächlich gelegen.
Viele Grüße
Richard