1

Я пытаюсь использовать AD Authenticator в WLS 12.1.2 (безопасность контейнера JAAS) для обработки сценария, в котором пользователь был настроен на «должен сменить пароль при следующем входе в систему», который, как я понимаю, установлен в атрибуте AD pwdLastSet. Если я установил значение 0 для определенного пользователя, а затем попытаюсь выполнить вход в мое приложение, я получаю ServletException в методе javax.servlet.http.HttpServletRequest.login (имя пользователя, пароль) с помощью связанного с ним общего исключения FailedLoginException, но я не Не получайте информацию о причине. Мне действительно нужен код ошибки 773 от AD или что-то, что указывает на код моего приложения, поэтому метод request.login создал исключение. Как-то нам нужно перевести это в javax.naming.AuthenticationException, которое мы получили бы, если бы мы вручную связали LDAP с новым InitialContext. Кажется немного странным, что нужно вручную привязываться к альтернативным сценариям, подобным этому, в то время как безопасность контейнера обрабатывает общий сценарий успеха. Есть идеи?Аутентификатор Active Directory и пользователь должны сменить пароль

ответ

1

Решение заключалось в том, чтобы написать собственный провайдер аутентификации & Модуль входа в систему, чтобы мы могли привязываться к AD с учетными данными пользователя, что, в свою очередь, позволяет нам получить доступ к точному NamingException. Это исключение содержит уникальный код для сбоя привязки (в нашем случае 773), а затем мы можем перевести его в соответствующий подкласс LoginException (в нашем случае CredentialExpiredException). Затем в нашем веб-приложении метод request.login получает ServletException, и причиной является наше CredentialExpiredException, и мы можем перенаправить на страницу смены пароля соответственно.