Класс 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:

  1. Subject
    • Если конструктор имеет параметр Subject, LoginContext использует объект Subject, указанный вызывающим методом.
    • Если вызывающий метод указывает субъект null и разрешено значение null, LoginContext создает новый Subject.
    • Если конструктор не имеет параметра Subject, LoginContext создает новый Subject.
  2. 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) должен иметь достаточные разрешения для выполнения любых задач, чувствительных к безопасности, которые могут выполнять модули.
  3. 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 с именем.

LoginContext​(String name, CallbackHandler callbackHandler)

Инициализирует новый объект LoginContext с именем и объектом CallbackHandler.

LoginContext​(String name, Subject subject)

Инициализирует новый объект LoginContext с именем и объектом Subject.

LoginContext​(String name, Subject subject, CallbackHandler callbackHandler)

Инициализирует новый объект LoginContext с именем, субъектом Subject для аутентификации и объектом CallbackHandler.

LoginContext​(String name, Subject subject, CallbackHandler callbackHandler, Configuration config)

Инициализирует новый объект LoginContext с именем, субъектом Subject для аутентификации, объектом CallbackHandler и обработчиком входа в систему Configuration.

Методы

Модификатор и тип Метод Описание
Subject getSubject()

Возвращает аутентифицированный субъект.

void login()

Выполнить аутентификацию.

void logout()

Выйти из системы субъекта Subject.

Методы, унаследованные от класса 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

Spec-Zone .ru
спецификации, руководства, описания, API