Entwicklung mit programmgesteuerten APIs für EJB-Anwendungen

Dieser Artikel beschreibt, wie Sie Ihre EJB-Anwendungen (Enterprise JavaBeans) über das Programm sichern.

Informationen zu diesem Vorgang

Die programmgesteuerte Sicherheit wird von Anwendungen verwendet, die Sicherheitskomponenten unterstützen, wenn die deklarative Sicherheit allein nicht ausreichend ist, um das Sicherheitsmodell der Anwendung zu definieren. Die API javax.ejb.EJBContext stellt zwei Methoden bereit, mit denen der Bean-Provider auf die Sicherheitsdaten dessen zugreifen kann, der die Enterprise-Bean aufgerufen hat.
  • IsCallerInRole (String Rolle): Gibt true zurück, wenn dem Aufrufenden der Bean Zugang zur angegebenen Sicherheitsrolle gewährt wird. Wenn der Aufrufende keinen Zugang zur angegebenen Rolle hat oder kein Aufrufender authentifiziert wurde, wird false zurückgegeben. Sollte die angegebene Rolle die Zugriffsberechtigung Jeder besitzen, wird immer true zurückgegeben.
  • getCallerPrincipal: Gibt das Principal-Objekt java.security zurück, das den Namen des Aufrufenden (der Bean) enthält. Wenn der Aufrufende nicht authentifiziert wurde, wird ein Principal mit einem nicht berechtigten Namen zurückgegeben.

Sie können ein Anmeldemodul so einrichten, das es die von diesen Aufrufen zurückgegebene Principal-Klasse anzeigt.

Wenn Sie die Methode isCallerInRole verwenden, deklarieren Sie ein Element security-role-ref im Implementierungsdeskriptor mit einem Unterelement role-name, das den an die Methode übergebenen Namen der Rolle enthält. Da tatsächliche Rollen beim Assemblieren der Anwendung erstellt werden, können Sie den Namen einer logischen Rolle verwenden und den Assemblierenden in der Beschreibung des Elements "security-role-ref" darauf hinweisen, dass diese Rolle über einen Link mit der tatsächlichen Rolle verbunden werden soll. Während der Assemblierung erstellt der Assemblierende ein untergeordnetes Element "role-link", um den Namen der Rolle mit der tatsächlichen Rolle zu verknüpfen. Ein Element "security-role-ref" kann erstellt werden, wenn ein Assembliertool wie Rational Application Developer verwendet wird. Sie können das Element "security-role-ref" auch beim Assemblieren mit einem Assembliertool erstellen.

Vorgehensweise

  1. Fügen Sie die erforderlichen Sicherheitsmethoden zum EJB-Modulcode hinzu.
  2. Erstellen Sie für alle in der Methode "isCallerInRole" verwendeten Namen von Rollen ein Element security-role-ref mit einem Feld "role-name". Wenn während der Entwicklung kein Element security-role-ref erstellt wird, vergewissern Sie sich, dass dieser Schritt bei der Assemblierung ausgeführt wird.

Ergebnisse

Wenn Sie die beschriebenen Schritte ausführen, erhalten Sie eine über das Programm gesicherte EJB-Anwendung.

Beispiel

Es wird strikt davon abgeraten, Sicherheitsrichtlinien fest in Anwendungen zu codieren. Es wird empfohlen, das Java™ EE-Sicherheitsmodell (Java Platform, Enterprise Edition) mit seiner Fähigkeit zur Deklaration von Sicherheitsrichtlinien zu verwenden, sofern dies möglich ist. Verwenden Sie diese APIs für die Entwicklung von EJB-Anwendungen, die Sicherheitskomponenten unterstützen.

Die Sicherheitsrichtlinien mit den Funktionen des Java EE-Sicherheitsmodells zu deklarieren ist sinnvoll, wenn eine EJB-Anwendung auf externe Ressourcen zugreifen und den Zugriff auf die externen Ressourcen mit ihrer eigenen Berechtigungstabelle steuern möchte (Zuordnung externer Ressourcen zu Benutzern). Verwenden Sie in diesem Fall die Methode getCallerPrincipal, um die Identität des Aufrufenden abzufragen. Anschließend kann die Anwendung für die Berechtigung ihre eigene Berechtigungstabelle konsultieren. Die Identifizierung des Aufrufenden kann auch das Abfragen der entsprechenden Benutzerinformationen von einer externen Quelle, z. B. einer Datenbank oder einer anderen Enterprise-Bean, unterstützen. Die Methode isCallerInRole können Sie auf ähnliche Weise verwenden.

Nach der Entwicklung können Sie ein Element security-role-ref erstellen:
<security-role-ref>
<description>Provide hints to assembler for linking this role-name to 
actual role here<\description>
<role-name>Mgr<\role-name>
</security-role-ref>
Während der Assemblierung erstellt der Assemblierende wie folgt ein Element role-link:
<security-role-ref>
<description>Hints provided by developer to map role-name to role-link</description>
<role-name>Mgr</role-name>
<role-link>Manager</role-link>
</security-role-ref>
Die programmgesteuerten Sicherheitsmethoden isCallerInRole und getCallerPrincipal für EJB-Komponenten können in jeder Geschäftsmethode einer Enterprise-Bean hinzugefügt werden. Bei dem folgenden Beispiel zu den APIs für programmgesteuerte Sicherheit geht es um eine Session-Bean:
public class aSessionBean implements SessionBean {

       .....

       // SessionContext erweitert EJBContext. Verwenden Sie für eine Entity-Bean EntityContext.
       javax.ejb.SessionContext context;

       // Die folgende Methode wird automatisch vom EJB-Container
       // aufgerufen.
       public void setSessionContext(javax.ejb.SessionContext ctx) {
              context = ctx; // Kontext der Session-Bean speichern
       }

       ....

       private  void aBusinessMethod()  {
       ....

       // Abfragen dessen, der die Bean aufgerufen hat, mit getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();     
       String  callerId= principal.getName();

       // Prüfen, ob der Aufrufende der Bean für die Rolle Mgr berechtigt ist
       boolean isMgr = context.isCallerInRole("Mgr");

       // Die obigen Informationen können von der Anwendung
       // nach Bedarf genutzt werden
                          
       ....
       }

       ....
}
Wenn Sie EJB-3.x-Module entwickeln, muss der Wert des Arguments rolename in der Methode isCallerInRole nicht durch das Deklarieren eines security-role-ref-Elements im Implementierungsdeskriptor definiert werden. Sie können stattdessen Java-Annotationen verwenden.
  @javax.annotation.security.DeclareRoles("Mgr")
  @Stateless											// Annotationen werden zur Anzeige einer Session-Bean verwendet
  public class aSessionBean implements MyBusinessInterface {	// Die Schnittstelle sessionbean muss nicht erweitert werden
        .....
        // SessionContext erweitert EJBContext. Verwenden Sie in EJB 3.0 eine Annotation Resource für die Kontextinjektion
	   @Resource
        javax.ejb.SessionContext context;       }

       ....

       private  void aBusinessMethod()  {
       ....

       // Abfragen dessen, der die Bean aufgerufen hat, mit getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();     
       String  callerId= principal.getName();

       // Prüfen, ob der Aufrufende der Bean für die Rolle Mgr berechtigt ist
       boolean isMgr = context.isCallerInRole("Mgr");

       // Die obigen Informationen können von der Anwendung
       // nach Bedarf genutzt werden
                          
       ....
       }

       ....
}

Nächste Schritte

Nachdem Sie eine Anwendung entwickelt haben, können Sie mit einem Assembliertool Rollen erstellen und diese dann mit Rollennamen in den security-role-ref-Elementen zuordnen. Lesen Sie die Informationen zum Sichern von Webanwendungen mit einem Assembliertool.

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_ejb
Dateiname:tsec_ejb.html