Wildfly 8 找不到 MyLoginModule

Wildfly 8 not finding MyLoginModule

我实现了登录模块。作为模块安装到 WildFly 8.2.0.Final 中。配置安全域。 将 jboss-web.xml 添加到我的 WebApplication 中的 WEB-INF 目录中,名称为安全域。

当我在网络表单上启动登录时,我在 wildfly 中遇到了这个错误:

PBOX000206: Login failure: javax.security.auth.login.LoginException: unable to find LoginModule class: my.webapp.auth.WildLoginModule from [Module "deployment.MyWebApp.war:main" from Service Module Loader]

为什么找不到我的 class?当这个 class 驻留在 wildfly 模块的 jar 中时。 更奇怪的是,几周前就成功了!

我终于找到了答案。我认为错误应该在 Wildfly 的配置中,经过长时间的研究和多种测试方法,我发现我的 LoginModule 实现只有在我的 WebApplication 中才能工作。但我想要一个单独的模块,我希望我的 WebApp 从安全实现中清除。

所以这就是 'it woks a couple weeks ago!' 的原因,因为这个 loginModule 在我的 webapp 中。

使用您自己的 JAAS 登录模块的步骤:

顺便说一句,this resource JBoss AS7对我的情况帮助很大

  1. 实现您自己的 Principals,登录模块(您可以在 i-net 中找到如何执行此操作)
  2. 将其打包到 jar
  3. 将like模块安装到Wildfly中(如果你需要在很多项目中使用它)

    使用 CLI 安装 jar 作为模块

    来自 resource

    的提示

    Things to remember

    When you create your own module, do not forget to add dependency on "org.picketbox" and "javax.api" in the module.xml of your custom module.

    module add --name=my.security.module --resources=/path/to/MyLoginModule.jar --dependencies=javax.api,org.picketbox,my.dependencies

  4. 在 Wildfly 中添加安全域(GUI、CLI 或手动版本 standalone.xml)

    而我的错误就在这一步。我的 sec.domain 看起来像这样:

    <security-domain name="mysecdomain" cache-type="default">
            <authentication>
                    <login-module code="my.code.MyLoginModule" flag="required">
                        <module-option name="jndiDb" value="java:/datasources/myDataSource"/>
                        <module-option name="userQuery" value=""/>
                        <module-option name="roleQuery" value=""/>
                    </login-module>
                </authentication>
    </security-domain>
    

    这就是它找不到我的代码的原因,它不知道在哪个模块中可以找到我的代码。所以 standalone.xml 的这一部分应该是这样的:

    <security-domain name="mysecdomain" cache-type="default">
            <authentication>
                    <login-module code="my.code.MyLoginModule" flag="required" ___module="my.security.module"___ >
                        <module-option name="jndiDb" value="java:/datasources/myDataSource"/>
                        <module-option name="userQuery" value=""/>
                        <module-option name="roleQuery" value=""/>
                    </login-module>
                </authentication>
    </security-domain>
    

    我没有配置,或者我在 CLI 中遗漏了这个参数的一些参数,但是这个 module="my.security.module" 应该在你的配置中。

之后我的 webapp 可以登录并使用这个安全模块。