Pregunta

estoy usando jboss-as-7.1.0.Final-SNAPSHOT e intentar configurar el módulo de inicio de sesión personalizado que use una base de datos. Seguí las instrucciones en la documentación AS7 para configurar un nuevo dominio de seguridad en standalone.xml, dominio de seguridad en jBoss-Security.xml y restricción de seguridad en Web.xml y configuré el registro de JBoss para rastrear para que pueda ver que mi Los métodos de módulo de inicio de sesión personalizados se están invocando correctamente (por ejemplo, login (), autenticate ()).

No quiero usar la demarcación de transacciones manuales en mi módulo de inicio de sesión, por lo que sería genial si mi módulo de inicio de sesión pudiera ser EJB con estado de EE.

Echar un vistazo al JBoss AS7: Modelo de dominio de seguridad artículo que dice:

Simplemente escriba el FQCN en el atributo de código y debería funcionar fuera de la casilla.

Para colocar los archivos de clase de módulo de inicio de sesión personalizados, puede colocarlos en un jar y ponerlo tampoco:

Classpath de aplicación de su archivo web (guerra) o JAR EJB o archivo empresarial (EAR) o módulo separado en el directorio de módulos.

Parece que el cielo es el límite de dónde puedo colocar mi módulo de inicio de sesión, incluso dentro del módulo EJB de mi aplicación. ¿Significa esto que mi módulo de inicio de sesión personalizado puede ser un EJB con estado? No he leído nada que diga "No." Sin embargo, cuando implemento mi módulo de inicio de sesión como los frijoles administrados con EJB con estado y el entityManager inyectado no parece inyectarse; Obtengo nullpointerexception cuando trato de invocar métodos en ellos.

Eché un vistazo a org.jboss.security.auth.spi.databaseserverloginmodule, que se proporciona como uno de los módulos de inicio de sesión predeterminados de JBoss. Quería ver cómo se maneja el acceso a la base de datos allí. La búsqueda de datos de datos es a través de InitialContext Eg

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(dsJndiName);
conn = ds.getConnection();

y las transacciones se manejan manualmente. No quiero usar este enfoque si es posible.

¿Puedo usar EJB con estado? ¿O estoy fuera de la base en mi enfoque para esto?

¿Fue útil?

Solución

La pregunta fue respondida en Comunidad jboss como sigue:

  • El módulo de inicio de sesión personalizado no puede ser un EJB con estado porque "los ciclos de vida respectivos de un EJB con estado y un módulo de inicio de sesión son bastante diferentes", y "los módulos de inicio de sesión se crean y utilizan para la duración de un solo paso de autenticación y luego se dejan recolectar la basura. "

  • El módulo de inicio de sesión personalizado no puede usar CDI, por lo que no se puede inyectar un frijol administrado. Una persona dijo que sería genial si JAAS proporcionara un medio para inyectar un frijol administrado, y que alguien necesita proponer una actualización de la especificación de JAAS. para permitir esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top