Développement à l'aide des API de sécurité par programmation pour les applications Web

Utilisez cette rubrique pour sécuriser par programmation vos applications Enterprise JavaBeans (EJB).

Pourquoi et quand exécuter cette tâche

La sécurité par programmation est utilisée par les applications sensibles à la sécurité lorsque la sécurité déclarative seule ne suffit pas à définir le modèle de sécurité de l'application. L'interface de programme d'application (API) javax.ejb.EJBContext (API) fournit deux méthodes grâce auxquelles le fournisseur de beans peut accéder aux informations de sécurité relatives au demandeur de bean enterprise.
  • IsCallerInRole (nom de rôle) : renvoie la valeur true si l'appelant du bean possède le rôle de sécurité spécifié par le nom du rôle. Dans le cas contraire ou si l'appelant n'est pas authentifié, la valeur false est renvoyée. Si le rôle indiqué correspond à l'accès Tous les utilisateurs, la valeur true est toujours retournée.
  • getCallerPrincipal : Renvoie l'objet java.security. Principal qui contient le nom du demandeur de bean. Si l'appelant n'est pas authentifié, un objet principal contenant le nom non autorisé est renvoyé.

Vous pouvez activer un module de connexion pour indiquer quelle classe de principal est renvoyée par ces appels.

Si vous utilisez la méthode isCallerInRole, déclarez un élément security-role-ref dans le descripteur de déploiement avec un sous-élément role-name contenant le nom du rôle transmis à cette méthode. Les rôles réels étant créés au cours de la phase d'assemblage de l'application, vous pouvez utiliser un rôle logique en tant que nom du rôle et fournir suffisamment de conseils à l'assembleur dans la description de l'élément security-role-ref pour lier ce rôle à un rôle réel. Au cours de l'assemblage, l'assembleur crée un sous-élément role-link pour lier le nom du rôle au rôle réel. La création d'un élément security-role-ref est possible si un outil d'assemblage, tel que Rational Application Developer est utilisé. Vous pouvez également créer l'élément security-role-ref lors de la phase d'assemblage à l'aide d'un outil d'assemblage.

Procédure

  1. Ajoutez les méthodes de sécurité requises dans le code du module EJB.
  2. Créez un élément security-role-ref avec une zone role-name pour tous les noms de rôle utilisés dans la méthode isCallerInRole. Si aucun élément security-role-ref n'est créé au cours du développement, vérifiez s'il est créé au cours de la phase d'assemblage.

Résultats

La réalisation des étapes précédentes résulte en une application EJB sécurisée par programmation.

Exemple

Les stratégies de sécurité définies dans le code des applications sont fortement déconseillées. Les fonctionnalités du modèle de sécurité Java™ Platform, Enterprise Edition (Java EE) permettant de spécifier de manière déclarative des règles de sécurité sont encouragées dans la mesure du possible. Utilisez ces API pour développer des applications EJB sécurisées.

L'utilisation des fonctions du modèle de sécurité Java EE pour spécifier les règles de sécurité de manière déclarative est particulièrement utile lorsqu'une application EJB tente d'accéder à des ressources externes et d'en contrôler l'accès à l'aide de son tableau d'autorisation (mappage entre ressources et utilisateurs). Dans ce cas, utilisez la méthode getCallerPrincipal() pour extraire l'identité de l'appelant ; l'application peut alors consulter sa propre table d'autorisations pour procéder aux autorisations. L'identification de l'appelant permet également d'extraire des informations sur les utilisateurs correspondants à partir d'une source externe, telle qu'une base de base de données ou un bean enterprise. Vous pouvez utiliser la méthode isCallerInRole de manière similaire.

Après le développement, vous pouvez créer un élément security-role-ref :
<security-role-ref>
<description>Fournit des conseils à l'assembleur pour relier l'élément role-name au 
rôle réel<\description>
<role-name>Mgr<\role-name>
</security-role-ref>
Lors de son exécution, l'assembleur crée un élément role-link :
<security-role-ref>
<description>Conseils fournis par le développeur pour mapper l'élément role-name vers role-link</description>
<role-name>Mgr</role-name>
<role-link>Manager</role-link>
</security-role-ref>
Vous pouvez ajouter des méthodes de sécurité des composants EJB par programmation (par exemple, isCallerInRole et getCallerPrincipal) dans les méthodes métier d'un bean enterprise. L'exemple d'API de sécurité par programmation suivant inclut un bean session :
public class aSessionBean implements SessionBean {

       .....

       // SessionContext étend EJBContext. S'il s'agit d'un bean entity, utilisez EntityContext
       javax.ejb.SessionContext context;

       // La méthode suivante sera appelée automatiquement par le 
       // conteneur d'EJB
       public void setSessionContext(javax.ejb.SessionContext ctx) {
              ontext = ctx; // sauvegarder le contexte du bean de session
       }

       ....

       private  void aBusinessMethod()  {
       ....

       // pour connaître l'appelant du bean à l'aide de getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();     
       String  callerId= principal.getName();

       // pour vérifier si l'appelant du bean possède le rôle Mgr
       boolean isMgr = context.isCallerInRole("Mgr");

       // utilisez les informations précédentes comme 
       // l'application le requiert. 
                          
       ....
       }

       ....
}
Lors du développement de modules de EJB 3.x, la valeur de l'argument rolename dans la méthode isCallerInRole peut être définie à l'aide d'annotations Java au lieu de déclarer un élément security-role-ref dans le descripteur de déploiement.
  @javax.annotation.security.DeclareRoles("Mgr")
  @Stateless											// l'annotation est utilisé pour signaler un bean session
  public class aSessionBean implements MyBusinessInterface {	//vous n'avez pas à étendre l'interface sessionbean
        .....
        // SessionContext étend EJBContext. Dans EJB 3.0 utilisez l'annotation Resource pour injecter le contexte
	   @Resource
        javax.ejb.SessionContext context;       }

       ....

       private  void aBusinessMethod()  {
       ....

       // pour connaître l'appelant du bean à l'aide de getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();     
       String  callerId= principal.getName();

       // pour vérifier si l'appelant du bean possède le rôle Mgr
       boolean isMgr = context.isCallerInRole("Mgr");

       // utilisez les informations précédentes comme 
       // l'application le requiert. 
                          
       ....
       }

       ....
}

Que faire ensuite

Après avoir développé une application, utilisez un outil d'assemblage pour créer des rôles et lier les rôles réels à des noms de rôle dans les éléments security-role-ref. Voir les informations relatives à la sécurisation des applications Web en utilisant un outil d'assemblage.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_ejb
Nom du fichier : tsec_ejb.html