Класс 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
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
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() |
Возвращает набор принципов, связанных с этим Subject. |
<T extends Principal> |
getPrincipals |
Возвращает набор принципов, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class. |
Set |
getPrivateCredentials() |
Возвращает набор закрытых учетных данных, хранящихся в этом Subject. |
<T> Set |
getPrivateCredentials |
Возвращает набор закрытых учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class. |
Set |
getPublicCredentials() |
Возвращает набор открытых учетных данных, хранящихся в этом Subject. |
<T> Set |
getPublicCredentials |
Возвращает набор открытых учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class. |
static Subject |
getSubject |
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии. Этот метод использовался для получения субъекта, связанного с предоставленным AccessControlContext, который был полезен только в сочетании с менеджером безопасности, который больше не поддерживается. |
int |
hashCode() |
Возвращает хэш-код для этого Subject. |
boolean |
isReadOnly() |
Определяет, является ли этот Subject только для чтения. |
void |
setReadOnly() |
Устанавливает, что этот Subject является только для чтения. |
String |
toString() |
Возвращает строковое представление этого Subject. |
Подробное описание конструкторов
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)
AccessControlContext, что было полезно только в сочетании с Security Manager, который больше не поддерживается. Этот метод был изменён так, что всегда генерирует UnsupportedOperationException. Был добавлен заменивший его API под названием current(), который можно использовать для получения текущего Subject. Заменителя для Security Manager нет.UnsupportedOperationException. Был добавлен заменивший его API под названием current(), который можно использовать для получения текущего Subject.- Параметры:
-
acc- игнорируется - Возвращает:
- n/a
- Исключения:
-
UnsupportedOperationException- всегда - См. также:
current
public static Subject current()
Текущий 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
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
- См. также:
doAs
@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedAction<T> action)
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. - См. также:
doAs
@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
PrivilegedExceptionAction с включенными привилегиями. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, который больше не поддерживается. Этот метод был изменен для запуска действия как есть и привязки субъекта к периоду его выполнения. Был добавлен заменяющий API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Замены для менеджера безопасности нет.Subject. Этот метод запускает action и привязывает subject к периоду его выполнения.
- Type Parameters:
T- тип значения, возвращаемого методомrunPrivilegedExceptionAction.- Parameters:
-
subject-Subject, от имени которого будет выполняться указанноеaction. Этот параметр может бытьnull. -
action- код, который нужно выполнить от имени указанногоSubject. - Returns:
- значение, возвращаемое методом
runPrivilegedExceptionAction. - Throws:
-
PrivilegedActionException- если методPrivilegedExceptionAction.runвыбрасывает проверяемое исключение. -
NullPointerException- если указанныйPrivilegedExceptionActionявляетсяnull. - See Also:
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
PrivilegedAction с включенными привилегиями и ограниченными указанным AccessControlContext. Выполнение действия с включенными привилегиями было полезно только в сочетании с менеджером безопасности, который больше не поддерживается. Этот метод был изменен для игнорирования AccessControlContext и запуска действия как есть, и привязки субъекта к периоду его выполнения. Был добавлен заменяющий API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Замены для менеджера безопасности нет.Subject. Этот метод запускает action и привязывает subject к периоду его выполнения.
- Type Parameters:
T- тип значения, возвращаемого методомrunPrivilegedAction.- Parameters:
-
subject-Subject, от имени которого будет выполняться указанноеaction. Этот параметр может бытьnull. -
action- код, который нужно выполнить от имени указанногоSubject. -
acc- игнорируется - Returns:
- значение, возвращаемое методом
runPrivilegedAction. - Throws:
-
NullPointerException- еслиPrivilegedActionявляетсяnull. - See Also:
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(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы. Замены для менеджера безопасности нет.Subject. Этот метод запускает action и привязывает subject к периоду его выполнения.
- Type Parameters:
T- тип значения, возвращаемого методомrunPrivilegedExceptionAction.- Parameters:
-
subject-Subject, от имени которого будет выполняться указанноеaction. Этот параметр может бытьnull. -
action- код, который нужно выполнить от имени указанногоSubject. -
acc- игнорируется - Returns:
- значение, возвращаемое методом
runPrivilegedExceptionAction. - Throws:
-
PrivilegedActionException- если методPrivilegedExceptionAction.runвыбрасывает проверяемое исключение. -
NullPointerException- если указанныйPrivilegedExceptionActionявляетсяnull. - See Also:
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.
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 множества равны.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://download.java.net/java/early_access/jdk24/docs/api/java.base/javax/security/auth/Subject.html
PrivilegedActionс включенными привилегиями.