2012-02-16 45 views
3

我正在使用jboss-as-7.1.0.Final-SNAPSHOT并尝试设置使用数据库的自定义登录模块。我按照AS7文档中的说明在standalone.xml中配置了一个新的安全域,在jboss-security.xml中配置了security-domain,在web.xml中配置了security-constraint,并且我将JBoss的日志记录设置为TRACE,这样我就可以看到我的自定义登录模块方法正在成功调用(例如,login(),authenticate())。定制的LoginModule可以成为有状态的ejb吗?

我不想在我的登录模块中使用手动事务分界,所以如果我的登录模块可以是有状态的ejb,那就太棒了。

以一看JBoss AS7 : Security Domain Model文章,其中说:

只写FQCN代码属性,它应该工作的开箱。

若要将自定义登录模块类文件,你可以将它们放在一个罐子里,并把它或者:

您的Web归档(WAR)或EJB JAR或企业归档(EAR)OR 单独的

应用程序类路径模块目录下的模块。

它看起来像天空的限制我可以放置我的登录模块,包括我的应用程序的EJB模块。这是否意味着我的自定义登录模块可以是有状态的ejb?我没有看过任何说“不”的东西。但是,当我部署我的登录模块作为有状态ejb注入托管的bean和注入的EntityManager似乎没有被注入;当我尝试调用它们上的方法时,我得到NullPointerException。

我看了一下org.jboss.security.auth.spi.DatabaseServerLoginModule,它是作为JBoss默认登录模块之一提供的。我想知道如何在那里处理数据库访问。 DataSource查找是通过InitialContext例如

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

和事务都是手动处理的。如果可能,我不想使用这种方法。

我可以使用有状态的ejb吗?或者我的方式基于我的方式?

回答

3

此问题已在JBoss Community回答如下:

  • 自定义登录模块不能有状态EJB,因为“有状态EJB和登录模块各自的生命周期有很大的不同,”和“登录模块在单个身份验证步骤的持续时间内创建并使用,然后进行垃圾回收。“

  • 自定义登录模块不能使用CDI,因此无法注入托管bean。一个人说,如果JAAS提供了一种注入托管bean的方法,而且有人需要提出更新JAAS规范,那将会非常酷。允许这个。

相关问题