Domanda

Sto usando jboss-as-7.1.0.Final-SNAPSHOT e cercando di creare modulo di login personalizzato che utilizza un database. Ho seguito le istruzioni riportate nella documentazione AS7 per configurare un nuovo dominio di sicurezza in standalone.xml, la sicurezza-domain in JBoss-security.xml e security-constraint in web.xml e ho impostato la registrazione JBoss' di tracciare in modo da poter vedere che il mio metodi di modulo di login personalizzati vengono invocati con successo (ad esempio login (), l'autenticazione ()).

Non voglio usare manuale di demarcazione transazione nel mio modulo di login, quindi sarebbe bello se il mio modulo di login potrebbe essere posta una stateful EJB.

Dando uno sguardo alla JBoss AS7: protezione del dominio del modello articolo, che dice:

Basta scrivere il FQCN l'attributo di codice e dovrebbe funzionare out of the box.

Per inserire i file di classe del modulo di login personalizzato, è possibile metterli in un barattolo e metterlo uno:

applicazione classpath del vostro archivio web (di guerra) o jar EJB o EAR (enterprise archive) OR modulo separato nella directory dei moduli.

Sembra che il cielo è il limite dove posso mettere il mio modulo di login, anche nel modulo EJB della mia candidatura. Questo significa che il mio modulo di login personalizzato può essere un bean stateful? Non ho letto nulla che dice: "No." Tuttavia quando schiero il mio modulo di login come EJB stateful iniettato fagioli gestiti e iniettato EntityManager non sembrano essere iniettato; Ottengo NullPointerException quando provo a richiamare i metodi su di essi.

Ho preso uno sguardo al org.jboss.security.auth.spi.DatabaseServerLoginModule, che viene fornito come uno dei moduli di login di default JBoss'. Volevo vedere come l'accesso al database viene gestito lì. DataSource di ricerca avviene tramite InitialContext per es.

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

e le transazioni vengono gestite manualmente. Non voglio usare questo approccio, se possibile.

Posso usare EJB stateful? O sono mio modo fuori base nel mio approccio a questo?

È stato utile?

Soluzione

The question was answered on JBoss Community as follows:

  • Custom login module cannot be a stateful ejb because "the respective lifecycles of a stateful EJB and a login module are quite different," and "login modules are created and used for the duration of a single authentication step and then left to be garbage collected."

  • Custom login module can't use CDI, so one cannot inject a managed bean. One person said that it would be pretty cool if JAAS provided a means to inject a managed bean, and that someone needs to propose an update the JAAS spec. to allow this.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top