Accès aux EJB
Une fois l’authentification effectuée, le contexte de sécurité est propagé d’un conteneur à l’autre : ● du conteneur client, pour un client lourd, vers le conteneur EJB ; ● du conteneur JSP vers le conteneur EJB ; ● d’un conteneur EJB vers un autre conteneur EJB. Au niveau de l’EJB, il est possible de gérer les autorisations d’accès aux méthodes. Il faut que les différents conteneurs utilisent le même contexte d’autorisation. Cela peut être vérifié en affichant les noms JNDI. java:comp namespace of the Chap 8 – Sécurité Web.war application: +- UserTransaction[link -> UserTransaction] (class: javax.naming.LinkRef) +- env (class: org.jnp.interfaces.NamingContext) | +- security (class: org.jnp.interfaces.NamingContext) | | +- realmMapping[link -> java:/jaas/exemple-eni] (class: javax.naming.LinkRef) | | +- subject[link -> java:/jaas/exemple-eni/subject] (class: javax.naming.LinkRef) | | +- securityMgr[link -> java:/jaas/exemple-eni] (class: javax.naming.LinkRef) | | +- security-domain[link -> java:/jaas/exemple-eni] (class: javax.naming.LinkRef) Ejb Module: Chap 8 – EJB2.jar java:comp namespace of the Calculette bean: +- env (class: org.jnp.interfaces.NamingContext) | +- security (class: org.jnp.interfaces.NamingContext) | | +- subject[link -> java:/jaas/exemple-eni/subject] (class: javax.naming.LinkRef) | | +- security-domain[link -> java:/jaas/exemple-eni] (class: javax.naming.LinkRef) java: Namespace … +- ConnectionFactory (class: org.jboss.mq.SpyConnectionFactory) +- jaas (class: javax.naming.Context) | +- exemple-eni (class: org.jboss.security.plugins.SecurityDomainContext) | +- other (class: org.jboss.security.plugins.SecurityDomainContext) | +- HsqlDbRealm (class: org.jboss.security.plugins.SecurityDomainContext) | +- jbossmq (class: org.jboss.security.plugins.SecurityDomainContext) | +- JmsXARealm (class: org.jboss.security.plugins.SecurityDomainContext)
Gestion des autorisations sur les EJB 2
Les extraits de code et de fichiers xml sont issus du projet « Chap 8 EJB2 ». Le projet Web « Chap 8 Sécurité Web » permet de tester l’EJB. Vous devez déployer les deux projets dans votre serveur. L’URL de test est : http://localhost:8080/secu. Pour être authentifié, vous devez d’abord cliquer sur le lien Administration du site, puis choisir EJB2 dans la liste déroulante. Calculette Calculette fr.eni.editions.ejb2.secu.CalculetteHome fr.eni.editions.ejb2.secu.Calculette fr.eni.editions.ejb2.secu.CalculetteLocalHome fr.eni.editions.ejb2.secu.CalculetteLocal fr.eni.editions.ejb2.secu.CalculetteSession Stateless Container admin admin Descripteur de déploiement ejbjar.xml – … admin … Ce premier extrait du fichier ejbjar.xml nous permet de déclarer les références aux rôles de sécurité. L’élément contient le mapping entre : ● qui est le nom du rôle qui est utilisé dans l’EJB, en gestion programmée de l’authentification ; ● correspond à un des rôles définis dans la balise . L’élément contient la définition des rôles qui seront utilisés par le composant. Les rôles sont définis dans la balise qui contient : ● correspond à une description éventuelle du rôle ; ● correspond à un rôle de sécurité. Ensuite, une autorisation est mise en place pour les méthodes de l’EJB au sein de l’élément . Le mapping entre les autorisations de méthodes et les rôles de sécurité est effectué dans la balise . … ]]> Calculette Remote additionner int int admin ]]> Calculette Remote Tag – 3 – soustraire int int … L’élément comporte les éléments fils : ● contient un texte optionnel décrivant le mapping ; ● rôle de sécurité permis pour utiliser la méthode. Cette balise peut être présente plusieurs fois, ou être absente ; ● précise que la méthode n’est pas liée à un rôle particulier ; ● contient le nom de la méthode. Peut aussi contenir un nom générique type * pour toutes les méthodes de l’EJB, ou get* pour tous les getters ; ● nom de l’EJB ; ● distingue le type d’interface pour la méthode : Remote, Home, Local ou LocalHome ; ● contient la liste des types des paramètres de la méthode, ce qui permet de préciser une signature particulière en cas de surcharge de la méthode. Le domaine de sécurité a été ajouté au fichier jboss.xml. … java:/jaas/exemple-eni Calculette ejb2/remote/Calculette ejb2/local/Calculette … Dans l’exemple, l’EJB CalculetteBean possède deux méthodes : additionner(…) et soustraire(…). Pour accéder à ces méthodes, il faut que l’utilisateur soit authentifié. La méthode additionner(…) peut être invoquée quel que soit l’utilisateur, tandis que la méthode soustraire(…) n’est utilisable que par un utilisateur ayant un profil « admin ». Le conteneur d’EJB lève une exception si les conditions de sécurité ne sont pas respectées lors de l’invocation d’une méthode, y compris sur les méthodes du cycle de vie. Descripteur de déploiement jboss.xml – 4 – Tag
Gestion des autorisations sur les EJB 3
Les extraits de code et de fichiers xml sont issus du projet « Chap 8 EJB3 ». Le projet Web « Chap 8 Sécurité Web » permet de tester l’EJB. Vous devez déployer les deux projets dans votre serveur. L’URL de test est : http://localhost:8080/secu. Pour être authentifié, vous devez d’abord cliquer sur le lien Administration du site, puis choisir EJB3 dans la liste déroulante. … @Local @Stateless @LocalBinding(jndiBinding= »ejb3/local/Calculette ») @SecurityDomain(« exemple-eni ») public class CalculetteBean implements Calculette { @Unchecked public int additionner(int a, int b) { return a+b; } @RolesAllowed({« admin »}) public int soustraire(int a, int b) { return a-b; } } Nous retrouvons les configurations équivalentes aux fichiers de déploiement des EJB 2, mais exprimées par les annotations. Dans notre exemple le fichier ejbjar.xml n’est pas présent. La description de configuration s’en trouve allégée, il n’y a plus besoin, entre autres, de définir les signatures. Les annotations utilisées ici sont : ● @securityDomain : contient le domaine de sécurité. Il s’agit d’une annotation JBoss facultative. Si elle n’est pas présente, le fichier jboss.xml doit déclarer le domaine de sécurité dans l’élément . Attention, la valeur de l’annotation n’est pas le nom JNDI mais uniquement le nom du domaine. Le nom JNDI du domaine est : java:/jaas/exemple-eni, nous utilisons donc uniquement exemple-eni. ● @Unchecked : correspond à l’élément du fichier de déploiement ejbjar.xml. La méthode n’est pas liée à l’authentification sur un rôle particulier. ● @RolesAllowed : correspond à l’élément du fichier ejbjar.xml. La valeur de l’annotation contient donc, les rôles autorisés à utiliser la méthode. La valeur de cette annotation est un tableau de String, d’où l’utilisation des accolades pour le passage de la valeur. Si plusieurs rôles sont définis, ils sont dans l’accolade, séparés par des virgules, par exemple @RoleAllowed({« admin », »gestion »}).