Интерфейс LoginModule
- Все известные реализующие классы:
JndiLoginModule, KeyStoreLoginModule, Krb5LoginModule, LdapLoginModule, NTLoginModule, UnixLoginModule
public interface LoginModule
Интерфейс поставщика службы для поставщиков технологий аутентификации. LoginModule подключаются к приложениям для обеспечения определенного типа аутентификации.
Приложения используют API LoginContext, а поставщики технологий аутентификации реализуют интерфейс LoginModule. Configuration указывает LoginModule, которые следует использовать с конкретным приложением для входа в систему. Таким образом, к приложению можно подключать различные LoginModule, не изменяя само приложение.
LoginContext отвечает за чтение Configuration и создание экземпляров соответствующих LoginModule. Каждый LoginModule инициализируется с помощью Subject, CallbackHandler, общего состояния LoginModule и параметров, специфичных для LoginModule.
Subject представляет Subject, проходящий аутентификацию в данный момент, и при успешной аутентификации обновляется соответствующими учетными данными. LoginModule используют CallbackHandler для взаимодействия с пользователями. Например, CallbackHandler можно использовать для запроса имени пользователя и пароля. Обратите внимание, что CallbackHandler может быть null. LoginModule, которым для аутентификации Subject обязательно требуется CallbackHandler, могут выбросить LoginException. LoginModule могут использовать общее состояние для обмена информацией или данными между собой.
Параметры, специфичные для LoginModule, представляют собой параметры, настроенные для этого LoginModule администратором или пользователем в Configuration входа в систему. Параметры определяются самим LoginModule и управляют его поведением. Например, LoginModule может определять параметры для поддержки возможностей отладки и тестирования. Параметры задаются с помощью синтаксиса «ключ-значение», например debug=true. LoginModule сохраняет параметры в виде Map, чтобы значения можно было получить по ключу. Обратите внимание, что количество параметров, которые может определить LoginModule, не ограничено.
Вызывающее приложение воспринимает процесс аутентификации как одну операцию. Однако процесс аутентификации внутри LoginModule проходит в две отдельные фазы. В первой фазе метод login LoginModule вызывается методом login объекта LoginContext. Затем метод login для LoginModule выполняет собственно аутентификацию (например, запрашивает и проверяет пароль) и сохраняет результат аутентификации в виде закрытой информации о состоянии. После завершения метод login LoginModule возвращает true (если аутентификация прошла успешно) или false (если его следует игнорировать), либо выбрасывает LoginException, указывая на ошибку. В случае ошибки LoginModule не должен повторять попытку аутентификации или вводить задержки. Такие задачи относятся к ответственности приложения. Если приложение попытается повторить аутентификацию, метод login LoginModule будет вызван снова.
Во второй фазе, если общая аутентификация LoginContext прошла успешно (соответствующие LoginModule с флагами REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL завершились успешно), вызывается метод commit для LoginModule. Метод commit для LoginModule проверяет сохраненное закрытое состояние, чтобы определить, прошла ли его собственная аутентификация успешно. Если общая аутентификация LoginContext и собственная аутентификация LoginModule прошли успешно, метод commit связывает соответствующие Principals (аутентифицированные идентификаторы) и учетные данные (данные аутентификации, например криптографические ключи) с Subject, расположенным в LoginModule.
Если общая аутентификация LoginContext завершилась неудачно (соответствующие LoginModule с флагами REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL не завершились успешно), для каждого LoginModule вызывается метод abort. В этом случае LoginModule удаляет или уничтожает все ранее сохраненное состояние аутентификации.
Выход из системы Subject выполняется в одну фазу. LoginContext вызывает метод logout LoginModule. Затем метод logout для LoginModule выполняет процедуры выхода из системы, например удаляет Principals или учетные данные из Subject либо записывает сведения о сеансе.
Реализация LoginModule должна иметь конструктор без аргументов. Это позволяет классам, загружающим LoginModule, создавать его экземпляр.
- С момента выпуска:
- 1.4
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
abort() |
Метод для прерывания процесса аутентификации (фаза 2). |
boolean |
commit() |
Метод для фиксации процесса аутентификации (фаза 2). |
void |
initialize |
Инициализирует этот LoginModule. |
boolean |
login() |
Метод для аутентификации Subject (фаза 1). |
boolean |
logout() |
Метод для выхода из системы Subject. |
Подробное описание методов
initialize
void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
LoginModule. Этот метод вызывается LoginContext после создания экземпляра этого LoginModule. Цель метода — инициализировать этот LoginModule соответствующей информацией. Если этот LoginModule не распознает какие-либо данные, хранящиеся в параметрах sharedState или options, их можно игнорировать.
- Параметры:
-
subject—Subject, для которого выполняется аутентификация. -
callbackHandler—CallbackHandlerдля взаимодействия с конечным пользователем (например, для запроса имени пользователя и пароля). -
sharedState— состояние, общее с другими настроенными LoginModule. -
options— параметры, указанные вConfigurationвхода в систему для данногоLoginModule.
login
boolean login() throws LoginException
Subject (фаза 1). Реализация этого метода выполняет аутентификацию Subject. Например, метод может запросить Subject данные, такие как имя пользователя и пароль, а затем попытаться проверить пароль. Метод сохраняет результат попытки аутентификации в виде закрытого состояния внутри LoginModule.
- Возвращает:
-
true, если аутентификация прошла успешно, илиfalse, если этотLoginModuleследует игнорировать. - Выбрасывает:
-
LoginException— если аутентификация завершилась неудачно
commit
boolean commit() throws LoginException
Этот метод вызывается, если общая аутентификация LoginContext прошла успешно (соответствующие LoginModule с флагами REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL завершились успешно).
Если собственная попытка аутентификации этого LoginModule прошла успешно (это проверяется путем получения закрытого состояния, сохраненного методом login), метод связывает соответствующие Principals и учетные данные с Subject, расположенным в LoginModule. Если собственная попытка аутентификации этого LoginModule завершилась неудачно, метод удаляет или уничтожает все ранее сохраненное состояние.
- Возвращает:
-
true, если метод выполнен успешно, илиfalse, если этотLoginModuleследует игнорировать. - Выбрасывает:
-
LoginException— если фиксация завершилась неудачно
abort
boolean abort() throws LoginException
Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачно (соответствующие LoginModule с флагами REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL не завершились успешно).
Если собственная попытка аутентификации этого LoginModule прошла успешно (это проверяется путем получения закрытого состояния, сохраненного методом login), метод очищает все ранее сохраненное состояние.
- Возвращает:
-
true, если метод выполнен успешно, илиfalse, если этотLoginModuleследует игнорировать. - Выбрасывает:
-
LoginException— если прерывание завершилось неудачно
logout
boolean logout() throws LoginException
Subject. Реализация этого метода может удалять или уничтожать Principals и учетные данные Subject.
- Примечание по реализации:
- Перед удалением переменной из набора Principals или учетных данных
Subjectследует проверить, не является ли онаnull; в противном случае будет выброшеноNullPointerException, поскольку эти наборы не допускают элементы null. Это особенно важно, если этот метод вызывается после сбоя входа в систему. - Возвращает:
-
true, если метод выполнен успешно, илиfalse, если этотLoginModuleследует игнорировать. - Выбрасывает:
-
LoginException— если выход из системы завершился неудачно
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/security/auth/spi/LoginModule.html