robin_kump
I'm new here

SecurityException bei Auftrag in neuem Thread

Hallo allerseits,

wir starten seit FirstSpirit 4.0 unserer Deployment-Aufträge per Workflow-Script in einem neuen Thread. Die angelegten Aufträge haben standardmäßig keine aktivierten Tasks. Diese werden durch das Workflow-Script vor Ausführungen bedarfsabhängig aktiviert.

Bis 5.2R17 hat das problemlos funktioniert. Seitdem wir vor kurzem auf 5.2R20 umgestiegen sind funktioniert das nur noch, wenn man Admin-Rechte hat. Bei normalen Redakteuren schlägt die Aktivierung der Tasks mit einer SecurityException in der Java-Konsole fehl.

Die relevante Stelle in unserem Script sieht ungefähr folgendermaßen aus (das Beispiel ist stark gekürzt):

executeDeployment() {

     new Thread( this ).start();

     run() {

          ...

          taskList = scheduleEntry.getTasks();

          for(i = 0; i < taskList.size(); i++) {

               if("Task1".equals(taskList.get(i).getName()) {

                    taskList.get(i).setActive(true);

                    taskList.get(i).setParameter("param","value");

                    }

                    ...

          }

          scheduleEntryControl = targetScheduleEntry.execute();

          scheduleEntryControl.awaitTermination();

          ...

     }

}

Java-Konsole:

// Error: Exception in runnable:bsh.TargetError: Method Invocation setActive : ... : .setActive ( true )

Called from method: startDeploymentThread : ... : executeDeployment ( )

Target exception: java.lang.SecurityException: CHANGE_PROJECT

Verwendet jemand zufällig eine ähnliche Methodik oder hat eine Idee?

 

Beste Grüße

Robin Kump

5 Replies
boersteken
Crownpeak employee

Hallo Robin,

es kann sehr gut sein, dass innerhalb so großer Versionssprünge irgendwann ein Security-Check implementiert wurde, der mit eurer Anforderung clashed. Trotzdem ist dies ein Fehlzustand und ich vermute, dass es sich hierbei um einen Bug handelt. Wende dich daher bitte an unseren Technical Support FirstSpirit Technical Support.

Grüße,

Philipp

0 Kudos

Hallo Philipp,

danke für das Feedback. Anfrage ist erstellt.

Wenn es ein relevantes Ergebnis gibt, ergänze ich das hier.

Beste Grüße

Robin

0 Kudos

Hallo,

wir haben aktualisiert von 5.2 R21 FS auf 5.2.2109.77244 und bekommen den gleichen Fehler.

Gibt es "best practise" beim Hinzufügen von Startknmoten bei einem Auftrag?

Auszug:

List startNodes = st.getStartNodes();

startNodes.add(newPageRefForXml);

Fehler: java.lang.SecurityException: CHANGE_PROJECT

Gruß,

S. Heinrich

0 Kudos
mscholz3
I'm new here

Hallo Robin,

nach dem Update auf R20 konnten wir Aufträge auch nicht mehr per Code manipulieren und hatten auch eine Security bzw. eine Berechtigungs-Fehlermeldung erhalten.

Nachdem wir den Benutzer bzw. die Gruppe in "Interaktiven Ausführung" hinzugefügt haben, hat es wieder funktioniert. Beispiel:

inline1963783317.png

Vielleicht hilft das ja.

Liebe Grüße

Marcel

0 Kudos

Hallo Marcel,

danke für den Hinweis.

Die entsprechenden Gruppen waren bei uns schon im Auftrag hinterlegt. Das Problem hat es bei uns leider trotzdem gegeben.

Zwischenzeitlich hatte ich auch regen Kontakt mit dem Support. Ergebnis: Das liegt an einem neuen Security-Modell.

Die Methode setActive(), mit der man einzelne Tasks aktivieren kann, darf von einem normalen User nicht mehr ausgeführt werden. Das Modell scheint aber noch etwas löchrig zu sein (meine Ansicht), da das in vielen Fällen eben doch noch möglich ist.

Die Empfehlung lautet die Logik zum aktivieren einzelner Tasks in einen zusätzlichen Task zu verschieben, da der Auftrag im Kontext des System-Users läuft und dieser die nötigen Rechte besitzt.

Es gibt auch einen Feature-Switch, um die Logik vorübergehend auf den alten Mechanismus zurück zu stellen. Ich möchte dem Support aber nicht in den Rück fallen und verzichte daher hier auf die Nennung des konkreten Switchs. Bei Bedarf bitte beim Support melden.

Wir haben uns Ende dieser Woche dazu entscheiden alle unsere betroffenen Aufträge umzubauen. Aber wahrscheinlich keine zusätzlichen Script-Tasks, da die aus unserer Sicht ganz schlecht zu entwicklen und warten sind, sondern komplett eigene Module oder Executables.

Viele Grüße

Robin