Интерфейс LoginModule
- Все известные реализующие классы:
-
JndiLoginModule,KeyStoreLoginModule,Krb5LoginModule,LdapLoginModule,NTLoginModule,UnixLoginModule
public interface LoginModule
Интерфейс поставщика услуг для поставщиков технологий аутентификации. LoginModules подключаются к приложениям для предоставления определенного типа аутентификации.
В то время как приложения обращаются к API LoginContext, поставщики технологий аутентификации реализуют интерфейс LoginModule. Configuration указывает LoginModule(ы), которые будут использоваться с конкретным приложением входа в систему. Таким образом, различные LoginModules могут быть подключены к приложению без необходимости каких-либо изменений в самом приложении.
LoginContext отвечает за чтение Configuration и создание соответствующих LoginModules. Каждый LoginModule инициализируется Subject, CallbackHandler, общим состоянием LoginModule и параметрами, специфичными для LoginModule. Subject представляет Subject, который в данный момент проходит аутентификацию, и обновляется соответствующими данными аутентификации, если аутентификация проходит успешно. LoginModules используют CallbackHandler для взаимодействия с пользователями. CallbackHandler может использоваться, например, для запроса имени пользователя и пароля. Обратите внимание, что CallbackHandler может быть null. LoginModules, которые безусловно требуют CallbackHandler для аутентификации Subject, могут выбросить исключение LoginException. LoginModules могут использовать общее состояние для обмена информацией или данными между собой.
Параметры, специфичные для 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 прошла успешно (соответствующие LoginModules REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL прошли успешно), то вызывается метод commit для LoginModule. Метод commit для LoginModule проверяет своё сохранённое состояние, чтобы увидеть, прошла ли его собственная аутентификация успешно. Если общая аутентификация LoginContext прошла успешно, и аутентификация LoginModule также прошла успешно, то метод commit связывает соответствующие принципы (аутентифицированные идентичности) и данные аутентификации (данные аутентификации, такие как криптографические ключи) с Subject в LoginModule.
Если общая аутентификация LoginContext завершилась неудачно (соответствующие LoginModules REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL не прошли успешно), то вызывается метод abort для каждого LoginModule. В этом случае LoginModule удаляет/уничтожает любое состояние аутентификации, первоначально сохранённое.
Выход из системы Subject включает только одну фазу. LoginContext вызывает метод logout LoginModule. Метод logout для LoginModule затем выполняет процедуры выхода из системы, такие как удаление принципов или данных аутентификации из Subject или регистрация информации о сеансе.
Реализация LoginModule должна иметь конструктор без аргументов. Это позволяет классам, загружающим LoginModule, создать его экземпляр.
- Since:
- 1.4
- See Also:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
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)
Этот метод вызывается LoginContext после того, как этот LoginModule был создан. Цель этого метода - инициализировать этот LoginModule соответствующей информацией. Если этот LoginModule не понимает какие-либо данные, хранящиеся в параметрах sharedState или options, они могут быть проигнорированы.
- Parameters:
-
subject-Subjectдля аутентификации. -
callbackHandler-CallbackHandlerдля взаимодействия с конечным пользователем (например, для запроса имени пользователя и пароля). -
sharedState- состояние, общее для других настроенных LoginModules. -
options- параметры, указанные в настройках входаConfigurationдля данногоLoginModule.
login
boolean login() throws LoginException
Subject (фаза 1). Реализация этого метода выполняет аутентификацию Subject. Например, он может запросить информацию, такую как имя пользователя и пароль, а затем попытаться проверить пароль. Этот метод сохраняет результат попытки аутентификации как состояние внутри LoginModule.
- Returns:
- true, если аутентификация прошла успешно, или false, если этот
LoginModuleдолжен быть проигнорирован. - Throws:
-
LoginException- если аутентификация не удалась
commit
boolean commit() throws LoginException
Этот метод вызывается, если общая аутентификация LoginContext прошла успешно (соответствующие LoginModules REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL прошли успешно).
Если собственная попытка аутентификации данного LoginModule прошла успешно (проверяется получением сохранённого состояния методом login), то этот метод связывает соответствующие принципы и данные аутентификации с Subject в LoginModule. Если попытка аутентификации данного LoginModule не удалась, то этот метод удаляет/уничтожает любое первоначально сохранённое состояние.
- Returns:
- true, если метод завершился успешно, или false, если этот
LoginModuleдолжен быть проигнорирован. - Throws:
-
LoginException- если подтверждение завершилось неудачно
abort
boolean abort() throws LoginException
Этот метод вызывается, если общая аутентификация LoginContext завершилась неудачно. (соответствующие LoginModules REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL не прошли успешно).
Если собственная попытка аутентификации данного LoginModule прошла успешно (проверяется получением сохранённого состояния методом login), то этот метод очищает любое первоначально сохранённое состояние.
- Returns:
- true, если метод завершился успешно, или false, если этот
LoginModuleдолжен быть проигнорирован. - Throws:
-
LoginException- если прерывание завершилось неудачно
logout
boolean logout() throws LoginException
Subject. Реализация этого метода может удалить/уничтожить принципы и данные аутентификации субъекта.
- Returns:
- true, если метод завершился успешно, или false, если этот
LoginModuleдолжен быть проигнорирован. - Throws:
-
LoginException- если выход из системы завершился неудачно
© 1993, 2021, 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/17/docs/api/java.base/javax/security/auth/spi/LoginModule.html