Класс LoginContext
- java.lang.Object
-
- javax.security.auth.login.LoginContext
public class LoginContext extends Object
Класс LoginContext описывает основные методы, используемые для аутентификации субъектов и предоставляет способ разработки приложения, независимого от технологии аутентификации. Configuration определяет технологию аутентификации, или LoginModule, которая должна использоваться с конкретным приложением. Разные LoginModules могут быть подключены к приложению без необходимости каких-либо изменений в самом приложении.
Помимо поддержки подключаемых модулей аутентификации, этот класс также поддерживает понятие складываемой аутентификации. Приложения могут быть настроены для использования более чем одного LoginModule. Например, можно настроить как Kerberos LoginModule, так и LoginModule для смарт-карт в приложении.
Типичный вызывающий метод инициализирует LoginContext с именем и CallbackHandler. LoginContext использует имя в качестве индекса в Конфигурации, чтобы определить, какие LoginModules должны быть использованы, и какие из них должны преуспеть, чтобы общая аутентификация прошла успешно. CallbackHandler передается в подлежащие LoginModules, чтобы они могли взаимодействовать с пользователями (например, запрашивая имя пользователя и пароль через графический пользовательский интерфейс).
После того, как вызывающий метод инициализировал LoginContext, он вызывает метод login для аутентификации Subject. Метод login вызывает настроенные модули для выполнения их соответствующих типов аутентификации (имя/пароль, проверка пин-кода смарт-карты и т.д.). Обратите внимание, что LoginModules не будут пытаться повторить попытки аутентификации и не будут вводить задержки в случае неудачи аутентификации. Такие задачи лежат на стороне вызывающего метода LoginContext.
Если метод login возвращается без генерации исключения, значит общая аутентификация прошла успешно. Затем вызывающий метод может получить недавно аутентифицированный субъект, вызвав метод getSubject. Принципы и учетные данные, связанные с субъектом, могут быть получены путем вызова соответствующих методов субъекта getPrincipals, getPublicCredentials, и getPrivateCredentials.
Для выхода из системы субъекта вызывающий метод вызывает метод logout. Как и с методом login, этот метод logout вызывает метод logout для настроенных модулей.
LoginContext не следует использовать для аутентификации более одного субъекта. Для аутентификации каждого отдельного субъекта следует использовать отдельный LoginContext.
Следующая документация относится ко всем конструкторам LoginContext:
-
Subject- Если конструктор имеет параметр Subject, LoginContext использует объект Subject, указанный вызывающим методом.
- Если вызывающий метод указывает субъект
nullи разрешено значениеnull, LoginContext создает новый Subject. - Если конструктор не имеет параметра Subject, LoginContext создает новый Subject.
-
Configuration- Если конструктор имеет параметр Configuration и вызывающий метод указывает не null Configuration, LoginContext использует указанную вызывающим методом Configuration.
Если конструктор не имеет параметра Configuration, или вызывающий метод указывает объект Configuration
null, конструктор использует следующий вызов для получения установленной Configuration:config = Configuration.getConfiguration();
В обоих случаях аргумент name, переданный в конструктор, передается методуConfiguration.getAppConfigurationEntry. Если в Конфигурации нет записей для заданного имени, тоLoginContextвызываетgetAppConfigurationEntryс именем "other" (имя по умолчанию). Если нет записи для "other", то генерируетсяLoginException. - Когда LoginContext использует установленную Configuration, вызывающий метод требует AuthPermissions createLoginContext.name и, возможно, createLoginContext.other. Кроме того, LoginContext будет вызывать настроенные модули изнутри вызова
AccessController.doPrivileged, так что модули, выполняющие задачи, чувствительные к безопасности (например, подключение к удаленным хостам и обновление Subject), будут требовать соответствующих разрешений, но вызывающие методы LoginContext не будут требовать этих разрешений. - Когда LoginContext использует указанную вызывающим методом Configuration, вызывающий метод не требует никаких AuthPermission createLoginContext. LoginContext сохраняет
AccessControlContextдля вызывающего метода и вызывает настроенные модули изнутри вызоваAccessController.doPrivileged, ограниченного этим контекстом. Это означает, что контекст вызывающего метода (сохраненный при создании LoginContext) должен иметь достаточные разрешения для выполнения любых задач, чувствительных к безопасности, которые могут выполнять модули.
- Если конструктор имеет параметр Configuration и вызывающий метод указывает не null Configuration, LoginContext использует указанную вызывающим методом Configuration.
-
CallbackHandler- Если конструктор имеет параметр CallbackHandler, LoginContext использует объект CallbackHandler, указанный вызывающим методом.
- Если конструктор не имеет параметра CallbackHandler, или вызывающий метод указывает объект CallbackHandler
null(и разрешено значениеnull), LoginContext запрашивает у свойства безопасностиauth.login.defaultCallbackHandlerполное имя класса реализации обработчика по умолчанию. Если свойство безопасности не установлено, то подлежащие модули не будут иметь CallbackHandler для взаимодействия с пользователем. Таким образом, вызывающий метод предполагает, что настроенные модули имеют альтернативные способы аутентификации пользователя. - Когда LoginContext использует установленную Configuration (вместо указанной вызывающим методом, см. выше), этот LoginContext должен обернуть любой указанный вызывающим методом или по умолчанию CallbackHandler в новую реализацию CallbackHandler, чья реализация метода
handleвызывает методhandleуказанного CallbackHandler в вызовеjava.security.AccessController.doPrivileged, ограниченном текущимAccessControlContextвызывающего метода.
- С тех пор как:
- 1.4
- См. также:
-
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- если указанное пользователем имя не найдено в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- если указанное пользователем имя не найдено вConfigurationи нет записи для "other", если указанный пользователем объектnameявляется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- если указанное пользователем имя не найдено в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- если указанное пользователем имя не найдено в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- если указанное пользователем имя не найдено вConfigurationи нет записи для "other". -
SecurityException- если установлен SecurityManager, config являетсяnull, и у вызывающего кода нет разрешения AuthPermission("createLoginContext.name"), или если запись конфигурации для name не существует, и у вызывающего кода нет дополнительного разрешения AuthPermission("createLoginContext.other") - С момента:
- 1.5
Методы
login
public void login()
throws LoginException Выполнить аутентификацию.
Этот метод вызывает метод login для каждого модуля входа, настроенного для name, указанного в конструкторе LoginContext в соответствии с конфигурацией входа Configuration. Каждый модуль LoginModule затем выполняет соответствующий тип аутентификации (имя пользователя/пароль, проверка пин-кода смарт-карты и т. д.).
Этот метод завершает двухфазный процесс аутентификации, вызывая метод commit каждого настроенного модуля входа, если общая аутентификация прошла успешно (успешно выполнились соответствующие модули REQUIRED, REQUISITE, SUFFICIENT и OPTIONAL), или вызывая метод abort каждого настроенного модуля входа, если общая аутентификация завершилась неудачно. В случае успешной аутентификации метод commit каждого успешного модуля входа связывает соответствующих владельцев прав и учетные данные с Subject. В случае неудачной аутентификации метод abort каждого модуля входа удаляет/уничтожает ранее сохраненное состояние.
Если первая фаза процесса аутентификации завершается неудачно, общая аутентификация завершается неудачно, и этот метод вызывает метод abort для каждого настроенного LoginModule.
Если вторая фаза завершается неудачно по какой-либо причине, этот метод передает исходное исключение, выброшенное либо во время первой фазы login, либо во время второй фазы commit. В любом случае общая аутентификация завершается неудачно.
В случае, когда несколько модулей входа завершаются неудачно, этот метод передает исключение, сгенерированное первым LoginModule, который завершился неудачей.
Обратите внимание, что если этот метод переходит к второй фазе (либо первая login, либо вторая commit фаза завершилась неудачно), этот метод вызывает все настроенные модули входа для приложения независимо от параметров флага Configuration. По сути, это означает, что семантика Requisite и Sufficient игнорируется во время второй фазы abort. Это гарантирует выполнение правильной очистки и восстановления состояния.
- Исключения:
-
LoginException- если аутентификация завершается неудачно.
logout
public void logout()
throws LoginException Выход из Subject.
Этот метод вызывает метод logout для каждого модуля LoginModule , настроенного для данного LoginContext. Каждый модуль LoginModule выполняет свою процедуру выхода, которая может включать удаление/уничтожение информации Principal и Credential из Subject и очистку состояния.
Обратите внимание, что этот метод вызывает все модули входа, настроенные для приложения, независимо от параметров флагов 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/login/LoginContext.html