我正在使用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吗?或者我的方式基于我的方式?