Spec-Zone.ru › OpenJDK 27

Класс Subject

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

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

У субъектов может быть несколько идентификаторов. Каждый идентификатор представлен как Principal в Subject. Принципалы просто связывают имена с Subject. Например, Subject, которым является человек по имени Alice, может иметь два принципала: один связывает «Alice Bar» — имя в её водительском удостоверении — с 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()
Возвращает Set принципалов, связанных с этим Subject.
<T extends Principal>
Set<T>
getPrincipals(Class<T> c)
Возвращает Set принципалов, связанных с этим Subject, которые являются экземплярами указанного Class или его подклассами.
Set<Object> getPrivateCredentials()
Возвращает Set закрытых учетных данных, хранящихся в этом Subject.
<T> Set<T> getPrivateCredentials(Class<T> c)
Возвращает Set закрытых учетных данных, связанных с этим Subject, которые являются экземплярами указанного Class или его подклассами.
Set<Object> getPublicCredentials()
Возвращает Set открытых учетных данных, хранящихся в этом Subject.
<T> Set<T> getPublicCredentials(Class<T> c)
Возвращает Set открытых учетных данных, связанных с этим Subject, которые являются экземплярами указанного Class или его подклассами.
static Subject getSubject(AccessControlContext acc)
Устарело, подлежит удалению: этот элемент API будет удален в одной из будущих версий.
Ранее этот метод получал субъект, связанный с предоставленным AccessControlContext, что было полезно только в сочетании с менеджером безопасности, который больше не поддерживается.
int hashCode()
Возвращает хеш-код этого Subject.
boolean isReadOnly()
Проверяет, доступен ли этот Subject только для чтения.
void setReadOnly()
Устанавливает для этого Subject режим «только чтение».
String toString()
Возвращает строковое представление этого Subject.

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
protected void finalize()
Устарело, подлежит удалению: этот элемент API будет удален в одной из будущих версий.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного периода реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного периода реального времени.

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

Subject

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

Созданные наборы проверяют, был ли этот Subject переведен в режим «только чтение», прежде чем разрешить последующие изменения. Эти наборы также запрещают null-элементы; попытки добавить, запросить или удалить null-элемент приведут к NullPointerException.

Subject

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

Principals и учетные данные из указанных наборов копируются в новые созданные наборы. Эти вновь созданные наборы проверяют, был ли этот Subject переведен в режим «только чтение», прежде чем разрешить последующие изменения. Эти наборы также запрещают null-элементы; попытки добавить, запросить или удалить null-элемент приведут к NullPointerException.

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

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

setReadOnly

public void setReadOnly()
Переводит этот Subject в режим «только чтение».

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

Последующие попытки изменить наборы Principal и учетных данных Subject приведут к выбрасыванию IllegalStateException. Кроме того, после перевода Subject в режим «только чтение» вернуть его в режим записи невозможно.

isReadOnly

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

getSubject

@Deprecated(since="17", forRemoval=true) public static Subject getSubject(AccessControlContext acc)
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии.
Ранее этот метод получал субъект, связанный с предоставленным AccessControlContext, который был полезен только в сочетании с менеджером безопасности, поддержка которого прекращена. Метод изменен и теперь всегда выбрасывает UnsupportedOperationException. Добавлен замещающий API с именем current(), который можно использовать для получения текущего субъекта. Замены менеджеру безопасности нет.
Выбрасывает UnsupportedOperationException. Добавлен замещающий API с именем current(), который можно использовать для получения текущего субъекта.
Параметры:
acc — игнорируется
Возвращает:
н/д
Исключения:
UnsupportedOperationException — всегда
См. также:
  • current()

current

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

Текущий субъект устанавливается методом callAs(Subject, Callable). При вызове callAs(subject, action) выполняется action, текущим субъектом которого является subject; его можно получить с помощью этого метода. После завершения action текущему субъекту присваивается его предыдущее значение. До первого вызова callAs() текущий субъект имеет значение null.

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

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

callAs

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

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

Параметры типа:
T — тип значения, возвращаемого методом call объекта action
Параметры:
subject — Subject, от имени которого будет выполняться указанный action. Этот параметр может быть null.
action — код, выполняемый с 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 с включенными привилегиями. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, поддержка которого прекращена. Метод изменен: теперь он запускает действие как есть и привязывает субъект к периоду выполнения действия. Добавлен замещающий API с именем callAs(Subject, Callable), который можно использовать для выполнения той же задачи. Замены менеджеру безопасности нет.
Выполняет работу от имени указанного 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(Subject, Callable), который можно использовать для выполнения той же задачи. Замены менеджеру безопасности нет.
Выполняет работу от имени указанного Subject.

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

Параметры типа:
T — тип значения, возвращаемого методом run объекта PrivilegedExceptionAction.
Параметры:
subject — Subject, от имени которого будет выполняться указанный action. Этот параметр может быть null.
action — код, выполняемый от имени указанного Subject.
Возвращает:
значение, возвращаемое методом run объекта PrivilegedExceptionAction.
Исключения:
PrivilegedActionException — если метод PrivilegedExceptionAction.run выбрасывает проверяемое исключение.
NullPointerException — если указанный PrivilegedExceptionAction имеет значение null.
См. также:
  • 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(Subject, Callable), который можно использовать для выполнения той же задачи. Замены менеджеру безопасности нет.
Выполняет работу от имени указанного Subject.

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

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

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

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

getPrincipals

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

Возвращаемый Set основан на внутреннем Principal Set этого Subject. Любые изменения возвращаемого Set также влияют на внутренний Principal Set.

Возвращает:
Set Principals, связанных с этим Subject.

getPrincipals

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

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

Параметры типа:
T — тип класса, моделируемого c
Параметры:
c — все Principals в возвращаемом Set будут экземплярами этого класса.
Возвращает:
Set Principals, являющихся экземплярами указанного Class.
Исключения:
NullPointerException — если указанный Class имеет значение null.

getPublicCredentials

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

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

Возвращает:
Set открытых учетных данных, имеющихся у этого Subject.

getPrivateCredentials

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

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

Возвращает:
Set закрытых учетных данных, имеющихся у этого Subject.

getPublicCredentials

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

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

Параметры типа:
T — тип класса, моделируемого c
Параметры:
c — все открытые учетные данные в возвращаемом Set будут экземплярами этого класса.
Возвращает:
Set открытых учетных данных, являющихся экземплярами указанного Class.
Исключения:
NullPointerException — если указанный Class имеет значение null.

getPrivateCredentials

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

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

Параметры типа:
T — тип класса, моделируемого c
Параметры:
c — все закрытые учетные данные в возвращаемом Set будут экземплярами этого класса.
Возвращает:
Set закрытых учетных данных, являющихся экземплярами указанного Class.
Исключения:
NullPointerException — если указанный Class имеет значение null.

equals

public boolean equals(Object o)
Сравнивает указанный объект с этим Subject на равенство. Возвращает true, если переданный объект также является Subject и два экземпляра Subject эквивалентны. Точнее, два экземпляра Subject равны, если их наборы Principal и Credential равны.
Переопределяет:
equals в классе Object
Параметры:
o — объект для сравнения на равенство с этим Subject.
Возвращает:
true, если указанный объект равен этому Subject.
См. также:
  • Object.hashCode()
  • HashMap

toString

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

hashCode

public int hashCode()
Возвращает хеш-код этого Subject.
Переопределяет:
hashCode в классе Object
Возвращает:
хеш-код этого Subject
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, общие сведения, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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