Referencias de rol de seguridad en aplicaciones web
Los desarrolladores de aplicaciones web o los proveedores EJB (Enterprise JavaBeans) deben utilizar un nombre de rol en el código cuando se utilizan las interfaces de programación de aplicaciones (API) de Java™ EE (Java Platform, Enterprise Edition) de seguridad programada disponibles isUserInRole(String roleName) y isCallerInRole(String roleName).
Puede que los roles utilizados en el entorno de ejecución desplegado no se conozcan hasta que los componentes de aplicación web y de EJB (por ejemplo, los archivos WAR (Web Archive) y ejb-jar.xml) se hayan ensamblado en un archivo EAR (Enterprise Archive). Por lo tanto, los elementos role-name que se utilizan en el código de componente de EJB o de aplicación web son elementos role-name lógicos que el ensamblador de aplicaciones correlaciona con los roles del entorno de ejecución durante el ensamblaje de aplicaciones. Las referencias de rol de seguridad proporcionan un nivel de desvío que impide que los desarrolladores de EJB y de componentes de aplicación web conozcan los roles reales en el entorno de ejecución.
La definición de los roles lógicos y la correlación con los roles reales del entorno de ejecución se especifican en el elemento security-role-ref de los descriptores de despliegue de aplicaciones web y de archivos JAR de EJB, web.xml y ejb-jar.xml respectivamente. Utilice las herramientas de ensamblaje para definir los nombres de rol y correlacionarlos con los roles de tiempo de ejecución reales en el entorno con el elemento role-link.
... <enterprise-beans>
... <entity>
<ejb-name>AardvarkPayroll</ejb-name>
<ejb-class>com.aardvark.payroll.PayrollBean</ejb-class>
...
<security-role-ref>
<description>
Este rol debe asignarse a los empleados del departamento de nóminas. Los miembros de este rol tienen acceso al historial de nóminas de cualquier persona. Dicho rol se ha enlazado con el rol payroll-department.
Este rol debe asignarse a los empleados del departamento de nóminas. Los miembros de este rol tienen acceso a todos los historiales de nóminas. Dicho rol se ha enlazado con el rol payroll-department.
</description> <role-name>payroll</role-name>
<role-link>payroll-department</role-link>
</security-role-ref> ...
</entity>
...
</enterprise-beans>
En el ejemplo anterior, la serie payroll, que aparece en el elemento <role-name>, es el argumento que utiliza el proveedor EJB en la API isCallerInRole(). El elemento <role-link> es lo que une el rol lógico con el rol real utilizado en el entorno de ejecución.
Observe que para los enterprise beans, el elemento security-role-ref debe aparecer en el descriptor de despliegue incluso si el elemento role-name lógico es el mismo que el role-name real del entorno.
Las reglas para los componentes de aplicaciones web son ligeramente diferentes. Si no se declara ningún elemento security-role-ref que coincida con un elemento security-role, el contenedor toma como valor predeterminado comprobar el argumento del elemento role-name en la lista de elementos security-role de la aplicación web. El método isUserInRole consulta la lista para determinar si el emisor se correlaciona con un security-role. El desarrollador debe saber que el uso de este mecanismo predeterminado puede limitar la flexibilidad para cambiar role-names en la aplicación sin necesidad de volver a compilar el servlet que realice la llamada.
Consulte la especificación de EJB versión 2.0 y Servlet versión 2.3 en el artículo "Seguridad: recursos de aprendizaje" para obtener detalles completos sobre esta especificación.