Desarrollo con las API programáticas para aplicaciones EJB

Utilice este tema para proteger programáticamente las aplicaciones EJB (Enterprise JavaBeans).

Acerca de esta tarea

La seguridad programada la utilizan las aplicaciones que aplican seguridad cuando simplemente la seguridad declarada no es suficiente para expresar el modelo de seguridad de la aplicación. La interfaz de programación de aplicaciones (API) javax.ejb.EJBContext proporciona dos métodos a través de los cuales el proveedor de beans puede acceder a la información de seguridad sobre el emisor del enterprise bean.
  • IsCallerInRole(Serie de nombre de rol): devuelve true si al emisor del bean se le ha otorgado el rol de seguridad especificado mediante el nombre de rol. Si al emisor no se le otorga el rol especificado o si no está autenticado, devuelve false. Si al rol especificado se le otorga el acceso Todos, siempre devuelve el valor true.
  • getCallerPrincipal: devuelve el objeto java.security.Principal que contiene el nombre del emisor del bean. Si el emisor no está autenticado, devuelve un principal que contiene un nombre no autorizado.

Puede habilitar un módulo de inicio de sesión para indicar qué clase de principal devuelven estas llamadas.

Cuando se utiliza el método isCallerInRole, declare un elemento security-role-ref en el descriptor de despliegue con un role-name que sea un subelemento que contenga el nombre de rol que se ha pasado a este método. Puesto que los roles reales se crean durante la fase de ensamblaje de la aplicación, el desarrollador puede utilizar un rol lógico como nombre de rol y proporcionar las suficientes sugerencias al ensamblador en la descripción del elemento security-role-ref para enlazar dicho rol con un rol real. Durante el ensamblaje, el ensamblador crea un subelemento role-link para enlazar el elemento role-name con el rol real. Es posible crear un elemento security-role-ref si se utiliza una herramienta de ensamblaje como Rational Application Developer. También puede crear el elemento security-role-ref durante la fase de ensamblaje mediante una herramienta de ensamblaje.

Procedimiento

  1. Añada los métodos de seguridad necesarios en el código del módulo EJB.
  2. Cree un elemento security-role-ref con un campo de nombre de rol para todos los nombres de roles que se utilicen en el método isCallerInRole(). Si no se crea el elemento security-role-ref durante el desarrollo, asegúrese de que se crea durante la fase de ensamblaje.

Resultados

El resultado de la realización de los pasos anteriores es una aplicación EJB protegida mediante programa.

Ejemplo

Se recomienda enérgicamente no codificar las políticas de seguridad en las aplicaciones. Siempre que sea posible, se recomienda el uso de las funciones del modelo de seguridad de Java™ EE (Java Platform, Enterprise Edition) de políticas de seguridad de especificación declarativa. Utilice estas API para desarrollar aplicaciones EJB que utilicen la seguridad.

El uso de las funciones del modelo de seguridad de Java EE para especificar de forma declarativa políticas de seguridad es útil cuando una aplicación EJB desea acceder a recursos externos así como controlar el acceso a los mismos mediante su propia tabla de autorizaciones (correlación de recurso externo con usuarios). En este caso, utilice el método getCallerPrincipal para obtener la identidad del emisor y, a continuación, la aplicación puede consultar su propia tabla de autorización para realizar la autorización. Identificar al emisor también puede ayudar a recuperar la información de usuario correspondiente de una fuente externa como, por ejemplo, una base de datos u otro enterprise bean. Puede utilizar el método isCallerInRole de modo similar.

Después del desarrollo, puede crear un elemento security-role-ref:
<security-role-ref>
<description>Proporcionar indicaciones al ensamblador para enlazar este role-name al 
rol real aquí<\description>
<role-name>Mgr<\role-name>
</security-role-ref>
Durante el ensamblaje, el ensamblador crea un elemento role-link:
<security-role-ref>
<description>Indicaciones proporcionadas por el desarrollador para
correlacionar role-name con role-link</description>
<role-name>Mgr</role-name>
<role-link>Manager</role-link>
</security-role-ref>
Los métodos de seguridad EJB mediante programación como, por ejemplo, isCallerInRol y getCallerPrincipal, pueden incluirse en cualquier método de empresa de un enterprise bean. El ejemplo siguiente de las API de seguridad programada incluye un bean de sesión:
public class aSessionBean implements SessionBean {

       .....

       // SessionContext extiende EJBContext. Si es un bean de entidad, usar EntityContext
       javax.ejb.SessionContext context;

       // El contenedor EJB invocará el siguiente método 
       //  automáticamente
       public void setSessionContext(javax.ejb.SessionContext ctx) {
              context = ctx; // guardar el contexto del bean de sesión
       }

       ....

       private  void aBusinessMethod()  {
       ....

       // obtener el emisor del bean utilizando getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();     
       String  callerId= principal.getName();

       // comprobar si el emisor del bean tiene el rol Mgr
       boolean isMgr = context.isCallerInRole("Mgr");

       // utilizar la información anterior en la forma que la necesite 
       //la aplicación 
                          
       ....
       }

       ....
}
Al desarrollar módulos EJB 3.x, el valor del argumento rolename en el método isCallerInRole se puede definir utilizando anotaciones Java en lugar de declarar un elemento security-role-ref en el descriptor de despliegue.
  @javax.annotation.security.DeclareRoles("Mgr")
  @Stateless											// la anotación se utiliza para indicar un bean de sesión
  public class aSessionBean implements MyBusinessInterface {	//no tiene que ampliar la interfaz sessionbean
        .....
        // SessionContext extiende EJBContext. En EJB 3.0 utilice la anotación Resource para insertar contexto
	   @Resource
        javax.ejb.SessionContext context;       }

       ....

       private  void aBusinessMethod()  {
       ....

       // obtener el emisor del bean utilizando getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();     
       String  callerId= principal.getName();

       // comprobar si el emisor del bean tiene el rol Mgr
       boolean isMgr = context.isCallerInRole("Mgr");

       // utilizar la información anterior en la forma que la necesite 
       //la aplicación 
                          
       ....
       }

       ....
}

Qué hacer a continuación

Después de desarrollar una aplicación, utilice una herramienta de ensamblaje para crear roles y enlazar los roles reales con los nombres de rol de los elementos security-role-ref. Consulte información sobre la protección de aplicaciones web utilizando una herramienta de ensamblaje.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_ejb
File name: tsec_ejb.html