EJB-Security auf JBoss AS 7.2 (aka EAP 6.1)

Mit JBoss 7.2 ist das Verhalten bei Aufrufen von EJB-Methoden strikter geworden. Wenn die EJBs überhaupt Security unterworfen sind (z. B. durch Zuordnung einer Security Domain im Deskriptor jboss-ejb3.xml), werden Methoden-Aufrufe ohne eine explizite Erlaubnis (also @PermitAll, @RolesAllowed bzw. analoge Deskriptor-Einträge) abgelehnt.

Die EJB-Spezifikation ist an der betreffenden Stelle IMHO so formuliert, dass solche Methoden von jedem User aufgerufen werden dürfen:

It is possible that some methods are not assigned to any security roles nor annotated as DenyAll or contained in the exclude-list element. In this case, the Deployer should assign method permissions for all of the unspecified methods, either by assigning them to security roles, or by marking them as unchecked. If the Deployer does not assigned method permissions to the unspecified methods, those methods must be treated by the container as unchecked.

Um dieses Verhalten auch bei JBoss 7.2 zu erhalten, gibt es mehrere Optionen:

  • Modifikation der Serverkonfiguration. Das Element <default-missing-method-permissions-deny-access> (im Subsystem ejb3) hat im Defaultzusand den Wert true. Setzt man es auf false, können die o. a. Methoden wieder aufgerufen werden.
  • Setzen des Verhaltens für Methoden ohne Security-Rolle für einzelne oder alle EJBs einer Anwendung im Deskriptor jboss-ejb3.xml:
    <?xml version="1.0"?>
    <jboss:jboss xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jboss="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="urn:security:1.1" version="3.1" impl-version="2.0">
      <assembly-descriptor>
        <s:security>
          <ejb-name>*</ejb-name>
          <s:security-domain>other</s:security-domain>
          <s:missing-method-permissions-deny-access>false</s:missing-method-permissions-deny-access>
        </s:security>
      </assembly-descriptor>
    </jboss:jboss>
  • Explizite Rollenzuordnung für jede EJB: Annotiert man jede EJB mit @PermitAll, so können alle Methoden, die keine andere Security-Annotation tragen, von jedem User aufgerufen werden. Diese Änderung ist zwar für jede EJB notwendig, hat aber den Vorteil, dass sie keine Speziallösung für JBoss 7.2 darstellt.
Advertisements

Über Dirk Weil
Dirk Weil ist seit 1998 als Berater im Bereich Java tätig. Als Geschäftsführer der GEDOPLAN GmbH in Bielefeld ist er für die Konzeption und Realisierung von Informationssystemen auf Basis von Java EE verantwortlich. Seine langjährige Erfahrung in der Entwicklung anspruchsvoller Unternehmenslösungen machen ihn zu einem kompetenten Ansprechpartner und anerkannten Experten auf dem Gebiet Java EE. Er ist Autor in Fachmagazinen, hält Vorträge und leitet Seminare und Workshops aus einem eigenen Java-Curriculum.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: