2010-02-09 16 views
11

Ich möchte Benutzer und Rollen in einer dedizierten Anwendung verwalten. Zum Beispiel kann ein Benutzer dieser Anwendung ("customerX-Chef") eine neue Rolle "customerX-Mitarbeiter" anlegen. Wenn ein Mitarbeiter auf den Java EE-Anwendungsserver (GlassFish 3) zugreift, sollte er die Rolle "customerX employee" erhalten.dynamische Rollen auf einem Java EE-Server

Es klingt einfach, wird aber von Java EE nicht unterstützt, da Gruppen beim Startup den Rollen zugeordnet werden und die Rollen in der Anwendung statisch sind.

Wie können Benutzerrollen zur Laufzeit in einer Java EE (6) -Umgebung am besten verwaltet werden?

+2

Ich habe https://java.net/jira/browse/JAVAEE_SPEC-20 in Unterstützung von (unter anderem) diesen Anwendungsfall erstellt. Wenn Sie oder jemand anders immer noch von der mangelnden Dynamik in Java EE-Rollen gestört wird, stimmen Sie bitte dafür oder hinterlassen Sie einen Kommentar. –

Antwort

11

Die deklarative Sicherheit in Java EE ist für solche Anforderungen in der Tat nicht geeignet. Das Problem der Sicherheit kann in zwei Teile gespalten werden:

  • Authentifizierung
  • Genehmigung

ich einmal ähnliche Anforderung hatte. Wir haben die integrierte Authentifizierung verwendet, um das Principal festzulegen, und haben uns dann auf die standardmäßigen Java EE-Anmeldemechanismen gestützt. Aber wir haben den Autorisierungsteil manuell auf der Anwendungsebene verwaltet.

der Tat, auch die Rollen, die mit dem Auftraggeber (isUserInRole für das Web und isCallerInRole für die EJB) geladen wird, und die damit verbundenen müssen in web.xml oder ejb.xml angegeben werden, die nicht genug Flexibilität bietet. Wir mussten dann die Rollen manuell (nach dem Prinzipal) aus LDAP oder ActiveDirectory laden. Wir haben dann die EJB3-Interzeptoren und den Servlet-Filter verwendet, um die Sicherheitsüberprüfungen selbst durchzuführen.

Ich würde jedoch dringend empfehlen, bei einer rollenbasierten Zugriffskontrolle (RBAC) zu bleiben und etwas mehr Phantasie nicht umzusetzen. Es gibt mehrere Frameworks, die helfen können, mit selbst erstellten RBAC umzugehen. Wir haben uns auch JSecurity und Acegi Security angesehen und sie schienen interessant zu sein.

+0

Danke für Ihre Antwort, besonders für den Hinweis, dass selbst dynamisch gesetzte Rollen in web.xml oder ejb.xml statisch deklariert werden müssen! Das wäre die nächste Falle für mich gewesen. Ich werde JSecurity an Spring Security (der Nachfolger von Acegi) http://static.springsource.org/spring-security/site/index.html überprüfen. – deamon

+1

JSecurity heißt jetzt "Shiro". http://cwiki.apache.org/confluence/display/SHIRO/Index – deamon

+0

Ja, mit '' oder '@ DeclaredRoles' deklarierte Rollen sind eigentlich symbolische Namen, die der Rolle im externen Verzeichnis zugeordnet werden sollten (zB LDAP) mit ''. Wenn das Mapping 1 zu 1 ist, hat Glassfish die Option "Standard-Principal für Rollenzuordnung", aber das ist nur die Hälfte der Lösung, und Sie müssen die Rolle trotzdem irgendwo auflisten. – ewernli