2016-07-16 2 views
0

In einer Sicherheits Java EE-Anwendung gibt es:
Wie funktionieren RoleAllowed und RunAs in EJB?

  • 3 EJB: B1, B2 und B3
  • 3 Methoden: m1 in B1, m2 in B2 und m3 in B3

Ein Ausführungspfad: m1 -> (m2-> m3). Das bedeutet: m1 ruft m2 und m2 ruft m3 an.

Eine Sicherheitskonfiguration:

  • 2 Rollen: Student und Professor
  • m1 erlaubt Student Rolle
  • m2 Professor Rolle
  • m3 ermöglicht Student Rolle
  • ermöglicht
  • B1 verwendet Run-as Professor Rolle

Ich habe 2 Szenarien, dass:
(1) Wenn ein Benutzer (Bob) ist Student Rolle zugewiesen. Die von Bob aufgerufene Ausführung m1 -> (m2-> m3) ist fehlgeschlagen. Wenn ich drucke Rollen der Anrufer in jeder Methode:

  • m1: student
  • m2: Professor

(2) Wenn ein Benutzer (Bob) Schüler zugewiesen Rolle und Professor Rolle. Die von Bob aufgerufene Ausführung m1 -> (m2-> m3) ist erfolgreich. Wenn ich drucke Rollen der Anrufer in jeder Methode:

  • m1: Student, Professor
  • m2: Student, Professor
  • m3: Student, Professor

FRAGE: In (1), warum beeinflusst RunAs die Rolle von Bob (Caller)? Aber in (2) ist es nicht so. System prüft @RoleAllowed vor @RunAs, oder?

Antwort

0

@RunAs wird für authentifizierte Benutzer ignoriert.

Es ist beabsichtigt, die Rolle zu definieren, die auf Methodenaufrufe angewendet wird, die normalerweise keinen authentifizierten Benutzerprinzipal wie EJB-Timeout-Methoden und die onMessage-Methode der Message Driven Beans haben.