Question

J'utilise jboss-as-7.1.0.Final-SNAPSHOT et essayer de mettre en place le module de connexion personnalisé qui utilise une base de données. J'ai suivi les instructions contenues dans la documentation pour configurer AS7 un nouveau domaine de la sécurité dans standalone.xml, la sécurité dans le domaine jboss-security.xml et contrainte de sécurité dans web.xml et je mis la journalisation de JBoss à TRACE afin que je puisse voir que mon méthodes de module de connexion personnalisé sont invoqués avec succès (par exemple login (), authenticate ()).

Je ne veux pas utiliser la démarcation de transaction manuelle dans mon module de connexion, donc ce serait bien si mon module de connexion pourrait être e stateful un ejb.

Un regard sur le JBoss AS 7: l'article de modèle de domaine de la sécurité, qui dit:

Il suffit d'écrire le FQCN dans l'attribut de code et il devrait fonctionner hors de la boîte.

Pour placer les fichiers de classe de module de connexion personnalisé, vous pouvez les placer dans un bocal et de le mettre soit:

Application classpath de votre archive Web (guerre) ou pot ou ejb archive d'entreprise (oreille) OU module séparé dans le répertoire des modules.

On dirait que le ciel est la limite où je peux placer mon module de connexion, y compris dans le module EJB de mon application. Est-ce que cela veut dire que mon module de connexion personnalisé peut être un ejb stateful? Je ne l'ai pas lu quelque chose qui dit: « Non » Cependant quand je mon module de déployer connexion comme stateful ejb injecté gérés haricots et injecté EntityManager ne semble pas être injecté; Je me NullPointerException lorsque je tente d'appeler des méthodes sur eux.

Je pris un coup d'œil à org.jboss.security.auth.spi.DatabaseServerLoginModule, qui est fourni comme l'un des modules de connexion par défaut de JBoss. Je voulais voir comment l'accès base de données est gérée il. DataSource recherche se fait par InitialContext par exemple.

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

et les opérations sont toutes traitées manuellement. Je ne veux pas utiliser cette approche si possible.

Puis-je utiliser ejb stateful? Ou suis comme je hors de la base dans mon approche de ce sujet?

Était-ce utile?

La solution

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top