Estoy desarrollando una aplicación Java EE 6 utilizando Glassfish 3.1, B06. Para asegurar mi aplicación, estoy usando un JDBCRealm y seguridad programática. Esto funciona bien para verificar el nombre de usuario y la contraseña. Pero cuando se trata de declarar roles de seguridad, tengo un problema:Agregar roles de seguridad de Java EE dinámicamente sin usar el descriptor de implementación
Para usar Roles de seguridad en Java EE 6, tengo que declarar esos roles tanto en el descriptor de despliegue EJB como en el descriptor de despliegue específico de Glassfish para vincularlos roles (como se explica en el Java EE 6-tutorial) Solo que puedo usar el método isCallerInRole (String roleRef) dentro de un EJB para comprobar los permisos.
Esto no es deseable para mi aplicación, ya que quiero que sea posible agregar funciones de seguridad tanto de forma dinámica como programática, sin tener que escribir archivos XML (y por ejemplo permitir definir nombres de roles en una base de datos).
acabo depurado a través del código GF3-fuente y se inició la aplicación de isCallerInRole en com.sun.ejb.containers.EjbContextImpl. Allí el recipiente se pone el papel del descriptor de EJB:
public boolean isCallerInRole(String roleRef) {
(...)
EjbDescriptor ejbd = container.getEjbDescriptor();
RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
(...)
}
Miré a mi alrededor y descubrí que si de alguna manera podría conseguir el descriptor de EJB dentro de mi solicitud, yo podría agregar una función como esta:
EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
¿Alguien hizo algo así o tiene alguna opinión al respecto? ¿Es posible usar el descriptor de despliegue Ejb dentro de mi aplicación? ¿O hay mejores enfoques?
P.S. o debería usar MBeans para agregar Roles? Encontré una publicación bastante relacionada here.
Como comentario adicional, le animo a pasar a una compilación más reciente de GlassFish Server 3.1. El equipo lanzó recientemente construir 22. – vkraemer
Gracias. Desafortunadamente, tenemos algunas bibliotecas que se rompen en las versiones más altas de Glassfish, así que tenemos que seguir con 06 hasta que se solucionen varios errores en estas librerías. – ifischer