当我尝试在 JBos "login failure all modules ignored" 7.1 上使用我的自定义登录模块时,我遇到了异常



当我尝试在jboss 7.1上使用我的自定义登录模块时,我得到了"登录失败所有模块被忽略"的异常。我试图将我的模块用作jboss模块和lib类,但我得到了这个异常,这就是堆栈:

ERROR [org.jboss.security.authentication.JBossCachedAuthenticationManager] (http--127.0.0.1-8088-1) Login failure: javax.security.auth.login.LoginException: Login Failure: all modules ignored
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:921) [rt.jar:1.6.0_20]
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186) [rt.jar:1.6.0_20]
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683) [rt.jar:1.6.0_20]
    at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.6.0_20]
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) [rt.jar:1.6.0_20]
    at javax.security.auth.login.LoginContext.login(LoginContext.java:579) [rt.jar:1.6.0_20]
    at org.jboss.security.authentication.JBossCachedAuthenticationManager.defaultLogin(JBossCachedAuthenticationManager.java:449) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
    at org.jboss.security.authentication.JBossCachedAuthenticationManager.proceedWithJaasLogin(JBossCachedAuthenticationManager.java:383) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
    at org.jboss.security.authentication.JBossCachedAuthenticationManager.authenticate(JBossCachedAuthenticationManager.java:361) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
    at org.jboss.security.authentication.JBossCachedAuthenticationManager.isValid(JBossCachedAuthenticationManager.java:160) [picketbox-infinispan-4.0.7.Final.jar:4.0.7.Final]
    at org.jboss.as.web.security.JBossWebRealm.authenticate(JBossWebRealm.java:214) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:280) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:381) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
    at java.lang.Thread.run(Thread.java:619) [rt.jar:1.6.0_20]

问题现在解决了,我只需要在错误的情况下抛出LogiException

TL;DR如果您看到all modules ignored,则表示每个LoginModule都返回false。每个LoginModule要么选择忽略,要么决定登录失败

此消息由Java安全层Java身份验证和授权服务(JAAS)生成。《开发人员指南》和《参考指南》中提供了有用的信息。

应该有一个配置文件,通常名为auth.conf,其中包含要加载的类的列表。列出的每个类都必须实现javax.security.auth.spi.LoginModulelogin()auth.conf中列出的每个模块中按顺序调用,如参考指南附录B中所述。然后在每个模块上调用CCD_ 7。

登录模块可以决定它不知道如何处理某个登录。在这种情况下,它应该从login()返回false,这表明它应该被忽略。开发者指南中的相关章节:

如果应忽略此LoginModule,则login应返回false。

如果身份验证失败,则引发LogiException,例如FailedLogiException。

许多文档错误地指出返回false表示失败,因此许多LoginModule都是以这种方式实现的。

如果您看到LoginException: Login Failure: all modules ignored,则表示您在auth.conf中没有配置LoginModule,或者每个配置的LoginModulelogin()方法都返回false。返回false可能意味着他们不知道如何处理登录,或者登录失败。

您可以将debug=true添加到auth.conf中的行的末尾,以要求LoginModule提供额外的日志记录,尽管不能保证他们会提供。

project {
  com.example.auth.ConsoleLoginModule required debug=true;
}

最新更新