GEDOPLAN
Application Server

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

Application Server

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

match 1899824 640
Jakarta EE (Java EE)

CDI 4.0: Events mit BeanManager feuern

CDI Events können mit Hilfe einer Event Source gefeuert werden, z. B. @Inject @Urgent Event<Message> urgentMessageEventSource; ... urgentMessageEventSource.fire(new Message(...)); Im…
demo
Webprogrammierung

Angular – WebWorker

Der Browser dient schon lange nicht mehr nur als einfaches Anzeigeinstrument für Webseiten. JavaScript übernimmt mehr und mehr Aufgaben die…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!