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