dirweis
I'm new here

Security Exception

Hi all,

wenn ich einen Scheduled Task ausführe, bekomme ich eine SecurityException bei dem Versuch, die Projekteinstellungs-Seite zu locken:

  1. globalStore.getProjectProperties().lock(true);

à  java.lang.SecurityException: changes not allowed for current connection

Als Benutzer wird mir SYSTEM (SYSTEM) ausgegeben, auch wenn ich das Skript als admin ausführen lassen möchte (s. Anhang).

Dazu bitte 2 Fragen beantworten:

- Lösung?

- Warum wird das Skript nicht unter Admin ausgeführt, obwohl ich die Admin-Connection explizit angegeben habe?

Ganz lieben Dank im Voraus & beste Grüße!

Dirk

0 Kudos
6 Replies
feddersen
Community Manager

Hallo Dirk,

mal ins Blaue geraten, unter Scripte als Admin laufen lassen könnte die Lösung sein.

Ansonsten bitte mal das Skript posten.

Viele Grüße

Christoph

hoebbel
Crownpeak employee

Hallo Dirk,

- Lösung?

Den user Service, mit dem Du den globalStore holst, nicht read-only über den context sondern über eine eigene connection holen:

connection.getProjectById(context.getProject().getId()).getUserService();

- Warum wird das Skript nicht unter Admin ausgeführt, obwohl ich die Admin-Connection explizit angegeben habe?

Wie oben erwähnt vermute ich, dass Du den globalStore über einen read-only UserService holst. Nur wenn man eine eigene Connection aufbaut, werden auch die angegebenen Verbindungsdaten benutzt.

Viele Grüsse aus Dortmund,

  Holger

Habe es jetzt mit folgendem Code versucht:

context.getConnection().getService(AdminService.class).getConnection()

.getProjectById(context.getProject().getId()).getUserService();

was leider nicht hilft.

Hier das Skript bis zu der Stelle an der es knallt:

import de.espirit.firstspirit.access.store.globalstore.*;

import de.espirit.firstspirit.access.store.*;

import de.espirit.firstspirit.access.*;

userService = context.getConnection().getService(AdminService.class).getConnection().getProjectById(context.getProject().getId()).getUserService();

globalStore = (GlobalStoreRoot) userService.getStore(Store.Type.GLOBALSTORE, false);

projectProperties = globalStore.getProjectProperties();

projectProperties.setLock(true);

Viele Grüße,

Dirk

0 Kudos

Hallo Dirk,

kannst du bitte noch die Exception und Stacktrace posten?

Danke!

Christoph

0 Kudos
hoebbel
Crownpeak employee

userService = context.getConnection().getService(AdminService.class).getConnection().getProjectById(context.getProject().getId()).getUserService();

!=

connection.getProjectById(context.getProject().getId()).getUserService();

Das ist immer noch die read-only connection mit dem System User, und nicht die angegebene Connection mit dem Admin-User!

Hi,

issue erledigt. Wenn ich mich der connection des ServerEnvironment-Objekts aus meinem eigenen Service bediene, haut es hin (auch wenn ich als user nach wie vor SYSTEM ausgegeben bekomme).

Danke & Grüße,

Dirk

0 Kudos