我正在使用Spring LDAP(1.3.1)与ADAM和Active Directory进行通信。
当我尝试使用ldapTemplate.authenticate()对某人进行身份验证时,我通过错误回调得到了错误,但是它提供了一个非常通用的异常AuthenticationException,我无法提取究竟是什么问题:
我得到的全部是一个detailMessage,我假设是AD发回的。类似的东西:
org.springframework.ldap.AuthenticationException: [LDAP:错误代码49 - 8009030C: LdapErr:DSID-0C0903A9,评论: AcceptSecurityContext错误,数据773, v1db0
我可以看到数据773
,这意味着用户必须在下次登录时更改密码。我不想手动解析它。有没有我不知道的“适配器”?
有没有人遇到过这个问题?
非常感谢!
答案 0 :(得分:4)
This link列出了ldap错误代码如何映射到JNDI异常。查看spring ldap代码,spring似乎将每个JNDI异常映射到其自定义LDAP异常(LdapUtils.convertLdapException()
)
现在,773
似乎与Active Directory有关。因此,如果需要,这需要由用户明确地处理。 This link列出了一堆Active Directory错误。 Spring ldap将在其错误详细信息中提供此文本,让用户可以使用它们。
答案 1 :(得分:0)
如果您的代码最终在PasswordPolicyAwareContextSource.getContext中
或者在类似的弹簧代码中,Spring没有很好地处理它(bug)
帐户过期时会引发异常。上面的类捕获了这个异常
然后,这是关键,它叫做
PasswordPolicyResponseControl ctrl = PasswordPolicyControlExtractor.extractControl(ctx);
Spring然后调用ctrl.isLocked()但是没有检查任何其他条件。
你应该覆盖Spring的代码,你可以检查ctrl.isExpired(),ctrl.isChangeAfterReset(),那时还有一堆其他的信息getter