Класс LoginContext
- java.lang.Object
-
- javax.security.auth.login.LoginContext
public class LoginContext extends Object
Класс LoginContext описывает основные методы, используемые для аутентификации субъектов, и предоставляет способ разработки приложения, независимого от технологии аутентификации. Configuration определяет используемую технологию аутентификации, или LoginModule, для конкретного приложения. Различные модули аутентификации (LoginModules) могут быть подключены к приложению без необходимости каких-либо изменений в самом приложении.
Помимо поддержки подключаемых модулей аутентификации, этот класс также поддерживает понятие стековой аутентификации. Приложения могут быть сконфигурированы для использования более чем одного модуля аутентификации. Например, можно сконфигурировать как модуль аутентификации Kerberos, так и модуль аутентификации смарт-карты в приложении.
Типичный вызывающий код создает экземпляр LoginContext с именем и CallbackHandler. LoginContext использует имя как индекс в конфигурации, чтобы определить, какие модули аутентификации должны быть использованы и какие должны быть выполнены успешно для успешной аутентификации в целом. CallbackHandler передается подлежащим модулям аутентификации, чтобы они могли общаться и взаимодействовать с пользователями (например, запрашивая имя пользователя и пароль через графический интерфейс).
После того, как вызывающий код создал экземпляр LoginContext, он вызывает метод login для аутентификации Subject. Метод login вызывает сконфигурированные модули для выполнения соответствующих типов аутентификации (имя пользователя/пароль, проверка PIN смарт-карты и т.д.). Обратите внимание, что модули аутентификации не будут пытаться повторить аутентификацию ни вводить задержки в случае неудачи аутентификации. Такие задачи относятся к вызывающему коду LoginContext.
Если метод login возвращается без исключения, то общая аутентификация прошла успешно. Затем вызывающий код может получить аутентифицированный субъект, вызвав метод getSubject. Принципы и данные, связанные с субъектом, можно получить, вызвав соответствующие методы субъекта: getPrincipals, getPublicCredentials, и getPrivateCredentials.
Чтобы выйти из системы субъекта, вызывающий код вызывает метод logout. Как и в случае с методом login, этот метод logout вызывает метод logout для сконфигурированных модулей.
LoginContext не следует использовать для аутентификации более чем одного субъекта. Для аутентификации каждого разного субъекта должен использоваться отдельный LoginContext.
Следующая документация относится ко всем конструкторам LoginContext:
-
Subject- Если конструктор имеет параметр Subject, LoginContext использует объект Subject, указанный вызывающим кодом.
- Если вызывающий код указывает субъект
nullи разрешено значениеnull, LoginContext создает новый субъект. - Если конструктор не имеет параметра Subject, LoginContext создает новый субъект.
-
Configuration- Если конструктор имеет параметр Configuration, и вызывающий код указывает непустую Configuration, LoginContext использует указанную вызывающим кодом Configuration.
Если конструктор не имеет параметра Configuration, или вызывающий код указывает объект Configuration
null, конструктор использует следующий вызов для получения установленной Configuration:config = Configuration.getConfiguration();
В обоих случаях аргумент name, переданный в конструктор, передается методуConfiguration.getAppConfigurationEntry. Если в Configuration нет записей для заданного имени, тоLoginContextвызываетgetAppConfigurationEntryс именем "other" (имя по умолчанию). Если нет записи для "other", то генерируется исключениеLoginException. - Когда LoginContext использует установленную Configuration, вызывающему коду требуются createLoginContext.name и, возможно, createLoginContext.other AuthPermissions. Кроме того, LoginContext будет вызывать сконфигурированные модули внутри вызова
AccessController.doPrivileged, поэтому модули, выполняющие задачи, связанные с безопасностью (например, подключение к удаленным хостам и обновление Subject), будут требовать соответствующих разрешений, но вызывающие кода LoginContext не потребуют этих разрешений. - Когда LoginContext использует указанную вызывающим кодом Configuration, вызывающему коду не требуются какие-либо разрешения createLoginContext AuthPermission. LoginContext сохраняет
AccessControlContextдля вызывающего кода и вызывает сконфигурированные модули внутри вызоваAccessController.doPrivilegedс ограничениями на основе этого контекста. Это означает, что контекст вызывающего кода (сохраненный при создании LoginContext) должен иметь достаточные права для выполнения любых задач, связанных с безопасностью, которые могут выполнить модули.
- Если конструктор имеет параметр Configuration, и вызывающий код указывает непустую Configuration, LoginContext использует указанную вызывающим кодом Configuration.
-
CallbackHandler- Если конструктор имеет параметр CallbackHandler, LoginContext использует объект CallbackHandler, указанный вызывающим кодом.
- Если конструктор не имеет параметра CallbackHandler, или вызывающий код указывает объект CallbackHandler
null(и разрешено значениеnull), LoginContext запрашивает свойство безопасностиauth.login.defaultCallbackHandlerдля получения полного имени класса реализации обработчика по умолчанию. Если свойство безопасности не задано, то подлежащие модули не будут иметь CallbackHandler для взаимодействия с пользователями. Таким образом, вызывающий код предполагает, что сконфигурированные модули имеют альтернативные средства для аутентификации пользователя. - Когда LoginContext использует установленную Configuration (вместо указанной вызывающим кодом, см. выше), то этот LoginContext должен обернуть любой указанный вызывающим кодом или обработчик по умолчанию в новую реализацию CallbackHandler, чья реализация метода
handleвызывает методhandleуказанного CallbackHandler внутри вызоваjava.security.AccessController.doPrivilegedс ограничениями на основе текущегоAccessControlContextвызывающего кода.
- См. также:
-
Security,AuthPermission,Subject,CallbackHandler,Configuration,LoginModule,security properties
Конструкторы
| Конструктор и описание |
|---|
LoginContext(String name) Создает новый объект |
LoginContext(String name,
CallbackHandler callbackHandler) Создает новый объект |
LoginContext(String name,
Subject subject) Создает новый объект |
LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler) Создает новый объект |
LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler,
Configuration config) Создает новый объект |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
Subject |
getSubject() Возвращает аутентифицированный субъект. |
void |
login() Выполняет аутентификацию. |
void |
logout() Выходит из системы |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
LoginContext
public LoginContext(String name)
throws LoginException Создайте новый объект LoginContext с именем.
- Параметры:
-
name- имя, используемое в качестве индекса вConfiguration. - Исключения:
-
LoginException- если указанное вызывающим кодом имяnameне найдено вConfigurationи нет записиConfigurationдля "other", или если свойство безопасности auth.login.defaultCallbackHandler было установлено, но класс реализации не удалось загрузить. -
SecurityException- если установлен SecurityManager и вызывающий код не имеет разрешения AuthPermission("createLoginContext.name"), или если запись конфигурации для name не существует, и вызывающий код не имеет дополнительного разрешения AuthPermission("createLoginContext.other")
LoginContext
public LoginContext(String name,
Subject subject)
throws LoginException Создайте новый объект LoginContext с именем и объектом Subject.
- Параметры:
-
name- имя, используемое в качестве индекса вConfiguration. -
subject- объектSubjectдля аутентификации. - Исключения:
-
LoginException- если указанное вызывающим кодом имяnameне найдено вConfigurationи нет записиConfigurationдля "other", если указанный вызывающим кодом объектsubjectявляетсяnull, или если свойство безопасности auth.login.defaultCallbackHandler было установлено, но класс реализации не удалось загрузить. -
SecurityException- если установлен SecurityManager и вызывающий код не имеет разрешения AuthPermission("createLoginContext.name"), или если запись конфигурации для name не существует, и вызывающий код не имеет дополнительного разрешения AuthPermission("createLoginContext.other")
LoginContext
public LoginContext(String name,
CallbackHandler callbackHandler)
throws LoginException Создайте новый объект LoginContext с именем и объектом CallbackHandler.
- Параметры:
-
name- имя, используемое в качестве индекса вConfiguration. -
callbackHandler- объектCallbackHandler, используемый LoginModules для взаимодействия с пользователем. - Исключения:
-
LoginException- если указанное вызывающим кодом имяnameне найдено вConfigurationи нет записиConfigurationдля "other", или если указанный вызывающим кодом объектcallbackHandlerявляетсяnull. -
SecurityException- если установлен SecurityManager и вызывающий код не имеет разрешения AuthPermission("createLoginContext.name"), или если запись конфигурации для name не существует, и вызывающий код не имеет дополнительного разрешения AuthPermission("createLoginContext.other")
LoginContext
public LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler)
throws LoginException Создайте новый объект LoginContext с именем, объектом Subject для аутентификации и объектом CallbackHandler.
- Параметры:
-
name- имя, используемое в качестве индекса вConfiguration. -
subject- объектSubjectдля аутентификации. -
callbackHandler- объектCallbackHandler, используемый LoginModules для взаимодействия с пользователем. - Исключения:
-
LoginException- если указанное вызывающим кодом имяnameне найдено вConfigurationи нет записиConfigurationдля "other", или если указанный вызывающим кодом объектsubjectявляетсяnull, или если указанный вызывающим кодом объектcallbackHandlerявляетсяnull. -
SecurityException- если установлен SecurityManager и вызывающий код не имеет разрешения AuthPermission("createLoginContext.name"), или если запись конфигурации для name не существует, и вызывающий код не имеет дополнительного разрешения AuthPermission("createLoginContext.other")
LoginContext
public LoginContext(String name,
Subject subject,
CallbackHandler callbackHandler,
Configuration config)
throws LoginException Создайте новый объект LoginContext с именем, объектом Subject для аутентификации, объектом CallbackHandler и конфигурацией входа Configuration.
- Параметры:
-
name- имя, используемое в качестве индекса в указанной вызывающим кодомConfiguration. -
subject- объектSubjectдля аутентификации илиnull. -
callbackHandler- объектCallbackHandler, используемый LoginModules для взаимодействия с пользователем, илиnull. -
config- объектConfiguration, содержащий список модулей входа, которые должны быть вызваны для выполнения аутентификации, илиnull. - Исключения:
-
LoginException- если указанное вызывающим кодом имяnameне найдено вConfigurationи нет записиConfigurationдля "other". -
SecurityException- если установлен SecurityManager, config имеет значениеnull, и вызывающий код не имеет разрешения AuthPermission("createLoginContext.name"), или если запись конфигурации для name не существует, и вызывающий код не имеет дополнительного разрешения AuthPermission("createLoginContext.other") - С момента:
- 1.5
Методы
login
public void login()
throws LoginException Выполнить аутентификацию.
Этот метод вызывает метод login для каждого модуля LoginModule, настроенного для name, указанного в конструкторе LoginContext, как определено в конфигурации входа Configuration. Каждый LoginModule затем выполняет свой тип аутентификации (имя пользователя/пароль, проверка PIN-кода смарт-карты и т. д.).
Этот метод завершает двухэтапный процесс аутентификации, вызывая метод commit каждого настроенного модуля LoginModule, если общая аутентификация прошла успешно (соответствующие модули LoginModule REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL успешно выполнили свою задачу), или вызывая метод abort каждого настроенного модуля LoginModule, если общая аутентификация завершилась неудачно. Если аутентификация прошла успешно, метод commit каждого успешного модуля LoginModule связывает соответствующие принципы и учетные данные с Subject. Если аутентификация завершилась неудачно, метод abort каждого модуля LoginModule удаляет/уничтожает любые ранее сохраненные данные.
Если фаза commit процесса аутентификации завершается неудачно, общая аутентификация завершается неудачно, и этот метод вызывает метод abort для каждого настроенного LoginModule.
Если фаза abort завершается неудачно по какой-либо причине, этот метод распространяет исходное исключение, сгенерированное либо во время фазы login, либо во время фазы commit. В обоих случаях общая аутентификация завершается неудачно.
В случае, когда несколько модулей LoginModule завершаются неудачно, этот метод распространяет исключение, сгенерированное первым LoginModule , который завершился неудачно.
Обратите внимание, что если этот метод переходит к фазе abort (либо фаза login, либо фаза commit завершилась неудачно), этот метод вызывает все настроенные для приложения модули LoginModule независимо от их параметров флагов Configuration. По сути, это означает, что семантика Requisite и Sufficient игнорируются во время фазы abort. Это гарантирует, что может произойти правильная очистка и восстановление состояния.
- Исключения:
-
LoginException- если аутентификация завершается неудачно.
logout
public void logout()
throws LoginException Выйти из Subject.
Этот метод вызывает метод logout для каждого LoginModule , настроенного для этого LoginContext. Каждый LoginModule выполняет свою процедуру выхода, которая может включать удаление/уничтожение Principal и Credential информации из Subject и очистку состояния.
Обратите внимание, что этот метод вызывает все настроенные для приложения модули LoginModule независимо от параметров флагов Configuration. По сути, это означает, что семантика Requisite и Sufficient игнорируется для этого метода. Это гарантирует, что может произойти правильная очистка и восстановление состояния.
- Исключения:
-
LoginException- если выход завершается неудачно.
getSubject
public Subject getSubject()
Возвращает аутентифицированный объект Subject.
- Возвращает:
- аутентифицированный объект Subject. Если вызывающий код указал объект Subject в конструкторе этого LoginContext, этот метод возвращает указанный вызывающим кодом объект Subject. Если объект Subject не был указан и аутентификация прошла успешно, этот метод возвращает объект Subject, созданный и используемый для аутентификации этим LoginContext. Если объект Subject не был указан, и аутентификация завершается неудачно или еще не была выполнена, этот метод возвращает null.
© 1993, 2020, 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.