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.
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. –