Referenzen auf Sicherheitsrollen in Webanwendungen
Entwickler von Webanwendungen und EJB-Provider (Enterprise JavaBeans) müssen einen Rollennamen im Code verwenden, wenn die verfügbaren Java™-EE-APIs (Java Enterprise Edition) für programmgesteuerte Sicherheit "isUserInRole(String roleName)" und "isCallerInRole(String roleName)" verwendet werden.
Die Rollen, die in der implementierten Laufzeitumgebung verwendet werden, werden möglicherweise erst dann bekannt, wenn die Webanwendung und die EJB-Komponenten (z. B. WAR-Dateien und ejb-jar.xml-Dateien) zu einer EAR-Datei assembliert wurden. Daher sind Rollennamen, die im Webanwendungs- oder EJB-Code verwendet werden, logische Rollennamen, die der Anwendungsassemblierer während der Anwendungsassemblierung den tatsächlichen Rollen der Laufzeitumgebung zuordnet. Die Referenzen auf Sicherheitsrollen stellen eine Zwischenstufe dar, so dass Entwickler von Webanwendungskomponenten und EJBs die tatsächlichen Rollen in der Laufzeitumgebung nicht zu kennen brauchen.
Die Definition logischer Rollen und die Zuordnung zu tatsächlichen Rollen der Laufzeitumgebung sind im Element "security-role-ref" der Implementierungsdeskriptoren der Webanwendung und der EJB-JAR-Datei, web.xml bzw. ejb-jar.xml, angegeben. Verwenden Sie die Assembliertools, um die Namen der Rollen zu definieren und sie mit dem Element "role-link" den echten Laufzeitrollen in der Umgebung zuzuordnen.
... <enterprise-beans>
... <entity>
<ejb-name>AardvarkPayroll</ejb-name>
<ejb-class>com.aardvark.payroll.PayrollBean</ejb-class>
...
<security-role-ref>
<description>
Diese Rolle sollte Mitarbeitern der Lohnbuchhaltung zugeordnet werden.
Die dieser Rolle zugeordneten Mitglieder haben Zugriff auf alle Verdienstbescheinigungen.
Die Rolle wurde der Rolle "payroll-department" zugeordnet.
Diese Rolle sollte Mitarbeitern der Lohnbuchhaltung zugeordnet werden.
Die dieser Rolle zugeordneten Mitglieder haben Zugriff auf alle Verdienstbescheinigungen.
Die Rolle wurde der Rolle "payroll-department" zugeordnet.
</description> <role-name>payroll</role-name>
<role-link>payroll-department</role-link>
</security-role-ref>
...
</entity>
...
</enterprise-beans>
Im vorherigen Beispiel steht die Zeichenfolge payroll im Element <role-name> für das Argument, das der EJB-Provider an die API isCallerInRole() übergibt. Das Element "<role-link>" bindet die logische Rolle an die tatsächliche Rolle in der Laufzeitumgebung.
Für Enterprise-Beans muss das Element "security-role-ref" im Implementierungsdeskriptor angegeben werden, auch wenn der logische Rollennamen mit dem tatsächlichen Rollennamen in der Umgebung identisch ist.
Die Regeln für Webanwendungskomponenten weichen leicht ab. Wenn kein Element "security-role-ref" deklariert ist, das mit einem Element "security-role" übereinstimmt, muss dem Container ein Standardwert zugeordnet werden, der bewirkt, dass der Parameter des Elements "role-name" gegen eine Liste von "security-role"-Elementen für die Webanwendung geprüft wird. Die Methode "isUserInRole" referenziert die Liste, um festzustellen, ob das aufrufende Programm einem Sicherheitsrollen zugeordnet ist. Der Entwickler muss beachten, dass die Verwendung dieses Standardverfahrens die Flexibilität bei der Änderung von Rollennamen in der Anwendung, die darin besteht, dass das aufrufende Servlet beim Änderungsvorgang nicht erneut kompiliert werden muss, einschränken kann.
Vollständige Einzelheiten zu dieser Spezifikation finden Sie in den Ausführungen zu EJB Version 2.0 und Servlet Version 2.3 im Artikel "Sicherheit: Lernmaterial".