我正在尝试使用 WLS 12.1.2(JAAS 容器安全性)中的 AD Authenticator 来处理用户已设置为“下次登录时必须更改密码”的场景,据我所知,这是在 AD 属性 pwdLastSet 中设置的。如果我为特定用户将其设置为 0,然后尝试登录我的应用程序,我会在 javax.servlet.http.HttpServletRequest.login(username, password) 方法上获得一个 ServletException,并带有一个捆绑的通用 FailedLoginException,但我没有'没有得到任何关于原因的信息。我真正需要的是来自 AD 的 773 错误代码或向我的应用程序代码表明这就是 request.login 方法引发异常的原因。不知何故,我们需要将其转换为 javax.naming.AuthenticationException,如果我们使用新的 InitialContext 手动执行 LDAP 绑定,我们会得到这样的结果。必须手动绑定以适应这样的替代场景似乎有点奇怪,而容器安全性处理一般的成功场景。有任何想法吗?
问问题
681 次
1 回答
1
解决方案是编写我们自己的身份验证提供程序和登录模块,以便我们自己可以使用用户的凭据绑定到 AD,这反过来又允许我们访问确切的 NamingException。该异常包含绑定失败的唯一代码(在我们的案例中为 773),然后我们能够将其转换为适当的 LoginException 子类(在我们的案例中为 CredentialExpiredException)。然后在我们的 web 应用程序中,request.login 方法接收到原因是我们的 CredentialExpiredException 的 ServletException,我们可以相应地重定向到更改密码页面。
于 2014-10-22T08:01:21.703 回答