Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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. |
Методы, объявленные в классе 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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного периода реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова 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—SetPrincipals, связанных с этим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 Principals, связанных с этим Subject. Каждый Principal представляет собой идентификатор этого Subject. Возвращаемый Set основан на внутреннем Principal Set этого Subject. Любые изменения возвращаемого Set также влияют на внутренний Principal Set.
- Возвращает:
SetPrincipals, связанных с этим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будут экземплярами этого класса. - Возвращает:
SetPrincipals, являющихся экземплярами указанного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 равны.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.
PrivilegedActionс включенными привилегиями.