10.2.3. Identité Sécurité
Un EJB (Enterprise Java Bean) peut spécifier l'identité qu'un autre EJB doit utiliser lorsqu'il appelle des méthodes sur les composants à l'aide de l'élément <security-identity>.

Figure 10.2. Modèle Java EE Security Identity Data Model
L'identité de l'invocation peut être celle de l'appelant en cours ou peut correspondre un rôle spécifique. L'assembleur d'applications utilise l'élément <security-identity> avec un élément enfant de <use-caller-identity>. Cela indique que l'identité de l'appelant en cours doit être propagée comme l'identité de sécurité pour les appels de méthode de l'EJB. La propagation d'identité de l'appelant est la valeur par défaut utilisée en l'absence d'une déclaration d'élément <security-identity> explicite.
Sinon, l'assembleur d'application peut utiliser l'élément enfant <run-as> ou <role-name> pour spécifier qu'un rôle de sécurité spécifique fourni par la valeur de l'élément <role-name> doit servir d'identité de sécurité pour les appels de méthode de l'EJB.
Notez que cela ne change pas l'identité de l'appelant telle qu'elle est perçue par la méthode
EJBContext.getCallerPrincipal()
. À la place, les rôles de sécurité de l'appelant sont définis par l'élément <run-as> ou <role-name>.
Un cas d'utilisation de l'élément <run-as> consiste à empêcher les clients externes d'accéder aux beans EJB internes. Vous pouvez configurer ce comportement en affectant des éléments EJB internes <method-permission> qui limitent l'accès à un rôle jamais attribué à un client externe. Les EJB qui doivent à leur tour utiliser les EJB internes sont ensuite configurés avec un <run-as> ou un <role-name> qui correspond au rôle restreint. Le fragment suivant de descripteur décrit un exemple d'utilisation de l'élément <security-identity>.
<ejb-jar> <enterprise-beans> <session> <ejb-name>ASessionBean</ejb-name> <!-- ... --> <security-identity> <use-caller-identity/> </security-identity> </session> <session> <ejb-name>RunAsBean</ejb-name> <!-- ... --> <security-identity> <run-as> <description>A private internal role</description> <role-name>InternalRole</role-name> </run-as> </security-identity> </session> </enterprise-beans> <!-- ... --> </ejb-jar>
Lorsque vous utilisez un <run-as> pour attribuer un rôle spécifique aux appels sortants, un principal nommé
anonymous
est attribué à tous les appels sortants. Si vous voulez un autre principal à associer à l'appel, vous devez associer un <run-as-principal> au bean du fichier jboss-ejb3.xml
. Le fragment suivant associe un principal nommé internal
avec RunAsBean
de l'exemple précédent.
<session> <ejb-name>RunAsBean</ejb-name> <security-identity> <run-as-principal>internal</run-as-principal> </security-identity> </session>
L'élément <run-as> est également disponible dans les définitions du servlet du fichier
web.xml
. L'exemple suivant montre comment assigner le rôle InternalRole
à un servlet :
<servlet> <servlet-name>AServlet</servlet-name> <!-- ... --> <run-as> <role-name>InternalRole</role-name> </run-as> </servlet>
Les appels de ce servlet sont associés au
principal
«anonymous». L'élément <run-as-principal> se trouve dans le fichier jboss-web.xml
pour assigner un principal spécifique qui puisse correspondre à un rôle run-as
. Le fragment suivant montre comment associer un principal nommé internal
au serveur ci-dessus.
<servlet> <servlet-name>AServlet</servlet-name> <run-as-principal>internal</run-as-principal> </servlet>