Spec-Zone.ru › OpenJDK 24

Класс Subject

java.lang.Object
javax.security.auth.Subject
Все реализованные интерфейсы:
Serializable
public final class Subject extends Object implements Serializable

Объект Subject представляет собой группировку связанной информации для одного сущности, например, человека. Такая информация включает идентификаторы субъекта, а также связанные с безопасностью атрибуты (пароли и криптографические ключи, например).

Субъекты могут потенциально иметь несколько идентификаторов. Каждый идентификатор представлен как Principal в рамках Subject. Принципы просто привязывают имена к Subject. Например, Subject, который является человеком, Алисой, может иметь два принципа: один, который связывает "Алиса Бар", имя из её водительских прав, с Subject, и другой, который связывает "999-99-9999", номер из её студенческого билета, с Subject. Оба принципа относятся к одному и тому же Subject, хотя каждое имеет разное имя.

Объект Subject также может содержать атрибуты, относящиеся к безопасности, которые называются учетными данными. Конфиденциальные учетные данные, требующие специальной защиты, такие как закрытые криптографические ключи, хранятся в закрытом хранилище учетных данных Set. Учетные данные, предназначенные для совместного использования, такие как сертификаты открытых ключей или билеты Kerberos-сервера, хранятся в открытом хранилище учетных данных Set.

Чтобы получить всех принципов, связанных с Subject, вызовите метод getPrincipals. Чтобы получить все открытые или закрытые учетные данные, принадлежащие Subject, вызовите соответственно метод getPublicCredentials или getPrivateCredentials. Для изменения возвращаемого Set принципов и учетных данных используйте методы, определенные в классе Set. Например:

      Subject subject;
      Principal principal;
      Object credential;

      // add a Principal and credential to the Subject
      subject.getPrincipals().add(principal);
      subject.getPublicCredentials().add(credential);
 

Этот класс Subject реализует Serializable. Хотя принципы, связанные с Subject, сериализуются, учетные данные, связанные с Subject, нет. Обратите внимание, что класс java.security.Principal не реализует Serializable. Поэтому все конкретные реализации Principal, связанные с субъектами, должны реализовывать Serializable.

Методы, помеченные как устаревшие, и их замены

Следующие методы в этом классе для авторизации на основе пользователя, которые зависят от API Security Manager, устарели и будут удалены:

  • getSubject(AccessControlContext)
  • doAs(Subject, PrivilegedAction)
  • doAs(Subject, PrivilegedExceptionAction)
  • doAsPrivileged(Subject, PrivilegedAction, AccessControlContext)
  • doAsPrivileged(Subject, PrivilegedExceptionAction, AccessControlContext)
Методы current() и callAs(Subject, Callable) являются их заменителями, где current эквивалентно getSubject(AccessController.getContext()) (как изначально указано) и callAs аналогично doAs, за исключением того, что тип входных данных и выбрасываемые исключения немного отличаются.

Вызов doAs или callAs привязывает объект Subject к периоду выполнения действия, и субъект можно получить с помощью метода current внутри действия. Этот субъект может быть унаследован дочерними потоками, если они запущены и завершены в процессе выполнения родительского потока, используя структурированную конкуренцию.

С:
1.4
См. также:
  • Principal
  • DomainCombiner
  • Форма сериализации

Краткое описание конструкторов

Конструктор Описание
Subject()
Создает экземпляр Subject с пустым Set принципов и пустыми наборами открытых и закрытых учетных данных.
Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
Создает экземпляр Subject с принципами и учетными данными.

Краткое описание методов

Модификатор и тип Метод Описание
static <T> T callAs(Subject subject, Callable<T> action)
Выполняет Callable с subject в качестве текущего субъекта.
static Subject current()
Возвращает текущий субъект.
static <T> T doAs(Subject subject, PrivilegedAction<T> action)
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedAction с включенными привилегиями.
static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action)
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedExceptionAction с включенными привилегиями.
static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedAction с включенными привилегиями и ограниченными указанным AccessControlContext.
static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc)
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedExceptionAction с включенными привилегиями и ограниченными указанным AccessControlContext.
boolean equals(Object o)
Сравнивает указанный объект с этим Subject на равенство.
Set<Principal> getPrincipals()
Возвращает набор принципов, связанных с этим Subject.
<T extends Principal>
Set<T>
getPrincipals(Class<T> c)
Возвращает набор принципов, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.
Set<Object> getPrivateCredentials()
Возвращает набор закрытых учетных данных, хранящихся в этом Subject.
<T> Set<T> getPrivateCredentials(Class<T> c)
Возвращает набор закрытых учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.
Set<Object> getPublicCredentials()
Возвращает набор открытых учетных данных, хранящихся в этом Subject.
<T> Set<T> getPublicCredentials(Class<T> c)
Возвращает набор открытых учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.
static Subject getSubject(AccessControlContext acc)
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод использовался для получения субъекта, связанного с предоставленным AccessControlContext, который был полезен только в сочетании с менеджером безопасности, который больше не поддерживается.
int hashCode()
Возвращает хэш-код для этого Subject.
boolean isReadOnly()
Определяет, является ли этот Subject только для чтения.
void setReadOnly()
Устанавливает, что этот Subject является только для чтения.
String toString()
Возвращает строковое представление этого Subject.

Методы, унаследованные от класса java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

Subject

public Subject()
Создаёт экземпляр Subject с пустым набором принципов (Principals) и пустыми наборами общедоступных и частных учётных данных.

Новые созданные наборы проверяют, был ли этот Subject установлен в режим только для чтения, прежде чем разрешить последующие изменения. Эти наборы также запрещают нулевые элементы, и попытки добавить, запросить или удалить нулевой элемент приведут к возникновению NullPointerException.

Subject

public Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
Создаёт экземпляр Subject с принципами и учётными данными.

Принципы и учётные данные из указанных наборов копируются в новые наборы. Эти новые наборы проверяют, был ли этот Subject установлен в режим только для чтения, прежде чем разрешить последующие изменения. Эти наборы также запрещают нулевые элементы, и попытки добавить, запросить или удалить нулевой элемент приведут к возникновению NullPointerException.

Параметры:
readOnly - true, если Subject должен быть только для чтения, и false в противном случае.
principals - набор принципов (Principals), которые должны быть связаны с этим Subject.
pubCredentials - набор общедоступных учётных данных, которые должны быть связаны с этим Subject.
privCredentials - набор частных учётных данных, которые должны быть связаны с этим Subject.
Исключения:
NullPointerException - если указанные principals, pubCredentials или privCredentials являются null, или в любом из этих трёх наборов существует нулевое значение.

Подробное описание методов

setReadOnly

public void setReadOnly()
Устанавливает режим только для чтения для этого Subject.

Изменения (добавление и удаление) в наборах принципов (Principals) и учётных данных этого Subject будут запрещены. Операция destroy для учётных данных этого Subject всё ещё будет разрешена.

Попытки последующего изменения наборов принципов (Principals) и учётных данных Subject приведут к генерации исключения IllegalStateException. Кроме того, после того, как Subject станет только для чтения, его нельзя будет перевести обратно в режим редактирования.

isReadOnly

public boolean isReadOnly()
Определяет, является ли этот Subject только для чтения.
Возвращает:
true, если этот Subject находится в режиме только для чтения, false в противном случае.

getSubject

@Deprecated(since="17", forRemoval=true) public static Subject getSubject(AccessControlContext acc)
Устарело, подлежит удалению: Этот элемент API может быть удалён в будущей версии.
Этот метод раньше использовался для получения Subject, связанного с предоставленным AccessControlContext, что было полезно только в сочетании с Security Manager, который больше не поддерживается. Этот метод был изменён так, что всегда генерирует UnsupportedOperationException. Был добавлен заменивший его API под названием current(), который можно использовать для получения текущего Subject. Заменителя для Security Manager нет.
Генерирует UnsupportedOperationException. Был добавлен заменивший его API под названием current(), который можно использовать для получения текущего Subject.
Параметры:
acc - игнорируется
Возвращает:
n/a
Исключения:
UnsupportedOperationException - всегда
См. также:
  • current()

current

public static Subject current()
Возвращает текущий Subject.

Текущий Subject устанавливается методом callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>). Когда вызывается callAs(subject, action), action выполняется с subject в качестве текущего Subject, который может быть получен этим методом. После завершения выполнения action текущий Subject сбрасывается до своего предыдущего значения. Текущий Subject является null до первого вызова callAs().

Этот метод возвращает Subject, привязанный к периоду выполнения текущей нити.

Возвращает:
текущий Subject или null, если текущий Subject не установлен или текущий Subject установлен в null.
С момента:
18
См. также:
  • callAs(Subject, Callable)

callAs

public static <T> T callAs(Subject subject, Callable<T> action) throws CompletionException
Выполняет Callable с subject в качестве текущего Subject.

Этот метод запускает action и связывает subject с периодом его выполнения.

Параметры типа:
T - тип значения, возвращаемого методом call класса action
Параметры:
subject - Subject, в качестве которого будет выполняться указанный action. Этот параметр может быть null.
action - код, который будет выполняться с subject в качестве текущего Subject. Не должен быть null.
Возвращает:
значение, возвращённое методом call класса action
Исключения:
NullPointerException - если action является null
CompletionException - если action.call() вызывает исключение. Причина исключения CompletionException устанавливается в исключение, выброшенное action.call().
С момента:
18
См. также:
  • current()

doAs

@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedAction<T> action)
Устарело, подлежит удалению: Этот элемент API может быть удалён в будущей версии.
Этот метод первоначально выполнял указанный PrivilegedAction с разрешениями. Выполнение действия с разрешениями было полезно только в сочетании с Security Manager, который больше не поддерживается. Этот метод был изменён так, чтобы запускать действие как есть и привязывать Subject к периоду его выполнения. Был добавлен заменивший его API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Заменителя для Security Manager нет.
Выполнить работу от имени определённого Subject.

Этот метод запускает action и связывает subject с периодом его выполнения.

Параметры типа:
T - тип возвращаемого значения методом run объекта PrivilegedAction.
Параметры:
subject - Subject, от имени которого будет выполняться указанный action. Этот параметр может быть null.
action - код, который будет выполняться от имени указанного Subject.
Возвращает:
значение, возвращённое методом run объекта PrivilegedAction.
Исключения:
NullPointerException - если PrivilegedAction является null.
См. также:
  • callAs(Subject, Callable)

doAs

@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedExceptionAction с включенными привилегиями. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, который больше не поддерживается. Этот метод был изменен для запуска действия как есть и привязки субъекта к периоду его выполнения. Был добавлен заменяющий API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Замены для менеджера безопасности нет.
Выполнить работу от имени конкретного Subject.

Этот метод запускает action и привязывает subject к периоду его выполнения.

Type Parameters:
T - тип значения, возвращаемого методом run PrivilegedExceptionAction.
Parameters:
subject - Subject, от имени которого будет выполняться указанное action. Этот параметр может быть null.
action - код, который нужно выполнить от имени указанного Subject.
Returns:
значение, возвращаемое методом run PrivilegedExceptionAction.
Throws:
PrivilegedActionException - если метод PrivilegedExceptionAction.run выбрасывает проверяемое исключение.
NullPointerException - если указанный PrivilegedExceptionAction является null.
See Also:
  • callAs(Subject, Callable)

doAsPrivileged

@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedAction с включенными привилегиями и ограниченными указанным AccessControlContext. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, который больше не поддерживается. Этот метод был изменен для игнорирования AccessControlContext и запуска действия как есть, и привязки субъекта к периоду его выполнения. Был добавлен заменяющий API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Замены для менеджера безопасности нет.
Выполнить работу от имени конкретного Subject.

Этот метод запускает action и привязывает subject к периоду его выполнения.

Type Parameters:
T - тип значения, возвращаемого методом run PrivilegedAction.
Parameters:
subject - Subject, от имени которого будет выполняться указанное action. Этот параметр может быть null.
action - код, который нужно выполнить от имени указанного Subject.
acc - игнорируется
Returns:
значение, возвращаемое методом run PrivilegedAction.
Throws:
NullPointerException - если PrivilegedAction является null.
See Also:
  • callAs(Subject, Callable)

doAsPrivileged

@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) throws PrivilegedActionException
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально выполнял указанное PrivilegedExceptionAction с включенными привилегиями и ограниченными указанным AccessControlContext. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, который больше не поддерживается. Этот метод был изменен для игнорирования AccessControlContext и запуска действия как есть, и привязки субъекта к периоду его выполнения. Был добавлен заменяющий API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Замены для менеджера безопасности нет.
Выполнить работу от имени конкретного Subject.

Этот метод запускает action и привязывает subject к периоду его выполнения.

Type Parameters:
T - тип значения, возвращаемого методом run PrivilegedExceptionAction.
Parameters:
subject - Subject, от имени которого будет выполняться указанное action. Этот параметр может быть null.
action - код, который нужно выполнить от имени указанного Subject.
acc - игнорируется
Returns:
значение, возвращаемое методом run PrivilegedExceptionAction.
Throws:
PrivilegedActionException - если метод PrivilegedExceptionAction.run выбрасывает проверяемое исключение.
NullPointerException - если указанный PrivilegedExceptionAction является null.
See Also:
  • callAs(Subject, Callable)

getPrincipals

public Set<Principal> getPrincipals()
Возвращает Set принципалов, связанных с этим Subject. Каждый Principal представляет идентификатор для этого Subject.

Возвращаемое Set поддерживается внутренним Principal Set этого субъекта. Любое изменение возвращаемого Set также влияет на внутреннее хранилище Principal Set.

Returns:
Set принципалов, связанных с этим Subject.

getPrincipals

public <T extends Principal> Set<T> getPrincipals(Class<T> c)
Возвращает Set принципалов, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Возвращаемое Set не поддерживается внутренним Principal Set этого субъекта. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутреннее хранилище Principal Set.

Type Parameters:
T - тип класса, моделируемого c
Parameters:
c - возвращаемое Set принципалов будет содержать только экземпляры этого класса.
Returns:
Set принципалов, которые являются экземплярами указанного Class.
Throws:
NullPointerException - если указанный Class является null.

getPublicCredentials

public Set<Object> getPublicCredentials()
Возвращает Set общедоступных данных, содержащихся в этом Subject.

Возвращаемое Set поддерживается внутренним хранилищем общедоступных данных Set этого субъекта. Любое изменение возвращаемого Set также влияет на внутреннее хранилище общедоступных данных Set.

Returns:
Set общедоступных данных, содержащихся в этом Subject.

getPrivateCredentials

public Set<Object> getPrivateCredentials()
Возвращает Set закрытых данных, содержащихся в этом Subject.

Возвращаемое Set поддерживается внутренним хранилищем закрытых данных Set этого субъекта. Любое изменение возвращаемого Set также влияет на внутреннее хранилище закрытых данных Set.

Returns:
Set закрытых данных, содержащихся в этом Subject.
END_OF_DOCUMENT_MARKER

getPublicCredentials

public <T> Set<T> getPublicCredentials(Class<T> c)
Возвращает Set публичных учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Возвращаемый Set не поддерживается внутренними публичными учетными данными Set этого Subject. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние публичные учетные данные Set.

Type Parameters:
T - тип класса, моделируемого c
Parameters:
c - все возвращаемые Set публичных учетных данных будут экземплярами этого класса.
Returns:
a Set публичных учетных данных, которые являются экземплярами указанного Class.
Throws:
NullPointerException - если указанный Class является null.

getPrivateCredentials

public <T> Set<T> getPrivateCredentials(Class<T> c)
Возвращает Set закрытых учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Возвращаемый Set не поддерживается внутренними закрытыми учетными данными Set этого Subject. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние закрытые учетные данные Set.

Type Parameters:
T - тип класса, моделируемого c
Parameters:
c - все возвращаемые Set закрытых учетных данных будут экземплярами этого класса.
Returns:
a Set закрытых учетных данных, которые являются экземплярами указанного Class.
Throws:
NullPointerException - если указанный Class является null.

equals

public boolean equals(Object o)
Сравнивает указанный объект с этим Subject на равенство. Возвращает true, если данный объект также является Subject и два экземпляра Subject эквивалентны. Более формально, два экземпляра Subject равны, если их Principal и Credential множества равны.
Overrides:
equals в классе Object
Parameters:
o - Объект для сравнения на равенство с этим Subject.
Returns:
true, если указанный объект равен этому Subject.
See Also:
  • Object.hashCode()
  • HashMap

toString

public String toString()
Возвращает строковое представление этого Subject.
Overrides:
toString в классе Object
Returns:
строковое представление этого Subject.

hashCode

public int hashCode()
Возвращает хэш-код для этого Subject.
Overrides:
hashCode в классе Object
Returns:
хэш-код для этого Subject
See Also:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/javax/security/auth/Subject.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API