Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Subject() |
Создает экземпляр Subject с пустым Set принципалов и пустыми наборами открытых и закрытых учетных данных. |
Subject |
Создает экземпляр Subject с принципалами и учетными данными. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T> T |
callAs |
Выполняет Callable, используя subject в качестве текущего субъекта. |
static Subject |
current() |
Возвращает текущий субъект. |
static <T> T |
doAs |
Устарел и будет удален: этот элемент API может быть удален в будущей версии. |
static <T> T |
doAs |
Устарел и будет удален: этот элемент API может быть удален в будущей версии. Изначально этот метод выполнял указанное PrivilegedExceptionAction с включенными привилегиями. |
static <T> T |
doAsPrivileged |
Устарел и будет удален: этот элемент API может быть удален в будущей версии. Изначально этот метод выполнял указанное PrivilegedAction с включенными привилегиями и ограничениями, заданными указанным AccessControlContext. |
static <T> T |
doAsPrivileged |
Устарел и будет удален: этот элемент API может быть удален в будущей версии. Изначально этот метод выполнял указанное PrivilegedExceptionAction с включенными привилегиями и ограничениями, заданными указанным AccessControlContext. |
boolean |
equals |
Сравнивает указанный объект с этим Subject на равенство. |
Set |
getPrincipals() |
Возвращает Set принципалов, связанных с этим Subject. |
<T extends Principal> |
getPrincipals |
Возвращает Set принципалов, связанных с этим Subject, которые являются экземплярами указанного Class или его подклассами. |
Set |
getPrivateCredentials() |
Возвращает Set закрытых учетных данных, принадлежащих этому Subject. |
<T> Set |
getPrivateCredentials |
Возвращает Set закрытых учетных данных, связанных с этим Subject, которые являются экземплярами указанного Class или его подклассами. |
Set |
getPublicCredentials() |
Возвращает Set открытых учетных данных, принадлежащих этому Subject. |
<T> Set |
getPublicCredentials |
Возвращает Set открытых учетных данных, связанных с этим Subject, которые являются экземплярами указанного Class или его подклассами. |
static Subject |
getSubject |
Устарел и будет удален: этот элемент API может быть удален в будущей версии. Раньше этот метод получал субъект, связанный с предоставленным AccessControlContext, который был полезен только совместно с менеджером безопасности, поддержка которого прекращена. |
int |
hashCode() |
Возвращает хеш-код этого Subject. |
boolean |
isReadOnly() |
Проверяет, доступен ли этот Subject только для чтения. |
void |
setReadOnly() |
Переводит этот Subject в режим «только для чтения». |
String |
toString() |
Возвращает строковое представление этого Subject. |
Подробное описание конструкторов
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)
AccessControlContext, что было полезно только в сочетании с менеджером безопасности, поддержка которого прекращена. Теперь этот метод всегда выбрасывает UnsupportedOperationException. Добавлен заменяющий API с именем current(), который можно использовать для получения текущего субъекта. Замены менеджеру безопасности нет.UnsupportedOperationException. Добавлен заменяющий API с именем current(), который можно использовать для получения текущего субъекта.- Параметры:
-
acc— игнорируется - Возвращает:
- не применимо
- Исключения:
-
UnsupportedOperationException— всегда - См. также:
current
public static Subject current()
Текущий субъект устанавливается методом callAs(Subject, Callable). При вызове callAs(subject, action) выполняется action, для которого subject является текущим субъектом; его можно получить с помощью этого метода. После завершения action текущему субъекту возвращается его предыдущее значение. До первого вызова callAs() текущий субъект имеет значение null.
Этот метод возвращает Subject, привязанный к периоду выполнения текущего потока.
- Возвращает:
- текущий субъект или
null, если текущий субъект не установлен либо текущему субъекту присвоено значениеnull. - Начиная с версии:
- 18
- См. также:
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
- См. также:
doAs
@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedAction<T> action)
PrivilegedAction с включенными привилегиями. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, поддержка которого прекращена. Теперь этот метод запускает действие без изменений и привязывает субъект к периоду его выполнения. Добавлен заменяющий API с именем callAs(Subject, Callable), который можно использовать для выполнения той же задачи. Замены менеджеру безопасности нет.Subject. Этот метод запускает action и привязывает subject к периоду его выполнения.
- Параметры типа:
T— тип значения, возвращаемого методомrunинтерфейса PrivilegedAction.- Параметры:
-
subject—Subject, от имени которого будет выполняться указанныйaction. Этот параметр может быть равенnull. -
action— код, выполняемый от имени указанногоSubject. - Возвращает:
- значение, возвращаемое методом
runинтерфейса PrivilegedAction. - Исключения:
-
NullPointerException— еслиPrivilegedActionравенnull. - См. также:
doAs
@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
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. - См. также:
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
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. - См. также:
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) throws PrivilegedActionException
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. - См. также:
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 равны.toString
hashCode
© 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
PrivilegedActionс включенными привилегиями.