1.2. Identidade de Segurança
Um Enterprise Java Bean (EJB) pode especificar a identidade que outro EJB deve usar quando invocando métodos em componentes usando o elemento <security-identity>. A Figura 1.2, “O elemento de identidade de segurança” descreve o elemento <security-identity>, seus elementos filho, e atributos.

Figura 1.2. O elemento de identidade de segurança
A identidade de invocação pode ser a do chamador atual ou pode ser uma função específica. O assembler do aplicativo usa o elemento <security-identity> com um elemento filho <use-caller-identity>. Isto indica que a identidade do chamador atual deve ser propagada como uma identidade de segurança para as invocações do método realizadas pelo EJB. A propagação da identidade do chamador é o padrão usado na ausência de uma declaração do elemento <security-identity>.
Alternativamente, o assembler do aplicativo pode usar o elemento filho <run-as> ou <role-name> para especificar que uma função de segurança específica suprida pelo valor do elemento role-name> deve ser usada como uma identidade de segurança para invocações de método realizadas pelo EJB.
Perceba que isto não altera a identidade do chamador conforme visto pelo método
EJBContext.getCallerPrincipal(). Ao invés disto, as funções de segurança do chamador são configuradas à função única especificada pelo valor do elemento <run-as> ou <role-name>.
Um caso de uso do elemento <run-as> é prevenir os clientes externos de acessarem EJBs internos. Você pode configurar este comportamento determinando os elementos <method-permission> do EJB interno, que restringe o acesso à uma função nunca determinada a um cliente externo. Os EJBs, que devem usar em troca EJBs internos, são então configurados com um <run-as> ou <role-name> igual à função restringida. O seguinte fragmento do descritor descreve uma amostra do uso do elemento <security-identity>.
<!-- A sample ejb-jar.xml fragment -->
<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>
Quando você usa um <run-as> para determinar uma função específica para chamadas de saída, um principal nomeado
anonymous é determinado a todas as chamadas de saída. Caso você deseje que outro principal seja associado com a chamada, você deverá associar um <run-as-principal> com o bean no arquivo jboss.xml. O seguinte fragmento associa um principal nomeado internal com o RunAsBean com a amostra anterior.
<session>
<ejb-name>RunAsBean</ejb-name>
<security-identity>
<run-as-principal>internal</run-as-principal>
</security-identity>
</session>
O elemento <run-as> encontra-se também disponível nas definições do servlet num arquivo
web.xml. A amostra seguinte apresenta como determinar o InternalRole de função a um servlet:
<servlet>
<servlet-name>AServlet</servlet-name>
<!-- ... -->
<run-as>
<role-name>InternalRole</role-name>
</run-as>
</servlet>
As chamadas a partir deste servlet estão associadas com o
principal anônimo. O elemento está disponível no arquivo jboss-web.xml para determinar um principal específico juntamente com a função run-as. O seguinte fragmento apresenta como associar um principal nomeado internal ao servlet acima.
<servlet>
<servlet-name>AServlet</servlet-name>
<run-as-principal>internal</run-as-principal>
</servlet>