2012-02-16 19 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規範,那將會非常酷。允許這個。

相關問題