我正在对我公司使用 JBOSS 4.2 的应用程序进行更正。
更改在登录页面中。我们使用登录配置,它使用 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>
和网络安全 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>
问题是:我想向用户显示发生错误时会发生什么,例如,如果他的帐户处于非活动状态,我不想显示“用户名/密码无效”
我做了一个自定义类来处理登录配置,这里称为登录,然后是更改
<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 不提供执行此操作的标准方法。