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.