Spec-Zone.ru › OpenJDK 25

Класс Subject

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

Subject представляет собой группу связанных сведений об отдельной сущности, например о человеке. Эти сведения включают идентификаторы 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 менеджера безопасности, объявлены устаревшими и будут удалены:

  • 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

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

Subject

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

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

Subject

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

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

Параметры:
readOnly — true, если Subject должен быть доступен только для чтения, и false в противном случае.
principals — Set субъектов безопасности, связанных с этим 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 субъектов безопасности, связанных с этим Subject. Каждый Principal представляет собой идентификатор этого Subject.

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

Возвращает:
Set субъектов безопасности, связанных с этим Subject.

getPrincipals

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

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

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

getPublicCredentials

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

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

Возвращает:
Set открытых учетных данных, принадлежащих этому Subject.

getPrivateCredentials

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

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

Возвращает:
Set закрытых учетных данных, принадлежащих этому Subject.

getPublicCredentials

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

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

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

getPrivateCredentials

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

Возвращаемый Set не связан с внутренним набором закрытых учетных данных Set этого Subject. При каждом вызове метода создается и возвращается новый Set. Изменения возвращаемого Set не влияют на внутренний набор закрытых учетных данных 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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/security/auth/Subject.html

Spec-Zone.ru

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