使用JBOSS通过login-config将错误传递给form-error-page

时间:2015-02-19 19:53:46

标签: java jsp jboss ldap login-config.xml

我在使用JBOSS 4.2的公司应用程序中进行了更正。

更改位于登录页面。 我们使用login-config使用LDAP连接到AD服务器。

工作正常,但问题是如果用户帐户过期或AD处于脱机状态或其他状态,用户将看到一个描述"用户名/密码无效的错误页面"因为login-config的方法返回一个只表示已连接的布尔值。

下面是实际的登录配置

<login-module code="org.jboss.security.auth.spi.LdapLoginModule" flag="requisite">
            <module-option name="password-stacking">useFirstPass</module-option>
            <module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option>
            <module-option name="java.naming.provider.url">ldaps://XXXXX</module-option>
            <module-option name="java.naming.security.authentication">simple</module-option>
            <module-option name="allowEmptyPasswords">false</module-option>
            <module-option name="principalDNPrefix">XXX</module-option>
            <module-option name="principalDNSuffix">,XXXXX</module-option>
            <module-option name="matchOnUserDN">true</module-option>
        </login-module>

和web-security xml

    <login-config>
    <auth-method>FORM</auth-method>    
    <form-login-config>     
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/login.jsp?invalidLogin=true</form-error-page>
    </form-login-config>
</login-config>

问题是:我想向用户展示发生错误时发生了什么,例如,如果他的帐户处于非活动状态,我不想显示&#34;用户名/密码无效&#34; < / p>

我创建了一个自定义类来处理login-config,这里称为Login,然后是更改

<login-module code="package.Login" flag="requisite">

有了这个,我可以获得LDAP错误,但我无法传递到登录错误页面,因为有效登录的方法是布尔值:

在JBOSS调用验证凭据的方法下面:

  /** Validate the inputPassword by creating a ldap InitialContext with the
    SECURITY_CREDENTIALS set to the password.

    @param inputPassword the password to validate.
    @param expectedPassword ignored
    */
   protected boolean validatePassword(String inputPassword, String     expectedPassword)
   {

    }

最后,是否可以将自定义错误消息返回到登录表单错误?可以解决方法,因为我已经读过login-config没有提供标准的方法来执行此操作。

1 个答案:

答案 0 :(得分:0)

我已经完成了一次,但我似乎无法找到代码段。 我记得,如果密码检查失败,我必须拨打getValidateError()

的内容
if ( validatePassword( pwd, null ) )
{
    // yeah
}
else
{
    Throwable e = getValidateError();
    // Now you can query the throwable for the cause and message
}

如果这不能让你到任何地方,请告诉我; - )