authentication - 自定义 LoginModule 可以是有状态的 ejb 吗?

标签 authentication jboss jaas jboss7.x

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

我不想在我的登录模块中使用手动事务划分,所以如果我的登录模块可以是一个有状态的 ejb 就好了。

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

Just write the FQCN in the code attribute and it should work out of the box.

To place the custom login module class files, you can place them in a jar and put it either:

application classpath of your web archive (war) or ejb jar or enterprise archive (ear) OR separate module under the modules directory.

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

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

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

并且交易都是人工处理的。如果可能,我不想使用这种方法。

我可以使用有状态的 ejb 吗?还是我的方法偏离了基本点?

最佳答案

问题已在 JBoss Community 上得到回答如下:

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

  • 自定义登录模块无法使用 CDI,因此无法注入(inject)托管 bean。一个人说,如果 JAAS 提供一种注入(inject)托管 bean 的方法,那将是非常酷的,并且有人需要提议更新 JAAS 规范。允许这样做。

关于authentication - 自定义 LoginModule 可以是有状态的 ejb 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9317145/

相关文章:

java - 如何针对 Java 中的服务器验证 Kerberos 票证?

java - 如何正确使用限制注释和标签

jquery - JQuery 和 SharePoint Web 服务的身份验证问题

ios - 无法使用 afnetworking 注册用户

ruby - 如何管理在硬盘驱动器上存储加密用户凭据的 Ruby 应用程序中的加密 key ?

java - 在Jboss eap 6.1中读取同一个war打包的镜像

java - JAAS 自动登录而不显示登录页面/表单

node.js cookie 与 request.jar

jakarta-ee - JBoss 无需重启即可重新加载证书信任库

java - 构建工作区期间的 StackOverflowError