Класс 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.
- Since:
- 1.4
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Subject() |
Создаёт экземпляр Subject с пустым списком Принципов и пустым набором публичных и приватных идентификаторов. |
Subject |
Создаёт экземпляр Subject с Принципами и идентификаторами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static <T> T |
callAs |
Выполняет Callable с subject в качестве текущего объекта. |
static Subject |
current() |
Возвращает текущий объект. |
static <T> T |
doAs |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. |
static <T> T |
doAs |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод зависит от AccessControlContext, который совместно с менеджером безопасности устарел и подлежит удалению в будущей версии. |
static <T> T |
doAsPrivileged |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод полезен только в сочетании с менеджером безопасности, который устарел и подлежит удалению в будущей версии. |
static <T> T |
doAsPrivileged |
Устаревший, подлежит удалению: Этот элемент API может быть удален в будущей версии. Этот метод полезен только в сочетании с менеджером безопасности, который устарел и подлежит удалению в будущей версии. |
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. |
Подробное описание конструкторов
Сущность
public Subject()
Subject с пустым набором Set принципалов и пустыми наборами общедоступных и приватных учетных данных. Новосозданные наборы проверяют, установлен ли для этого Subject режим только для чтения, прежде чем разрешить последующие изменения. Новосозданные наборы также предотвращают незаконные изменения, гарантируя, что у вызывающего объекта есть достаточные права. Эти наборы также запрещают нулевые элементы, и попытки добавить, запросить или удалить нулевой элемент приведут к NullPointerException.
Для изменения набора принципалов вызывающий объект должен иметь AuthPermission("modifyPrincipals"). Для изменения набора общедоступных учетных данных вызывающий объект должен иметь AuthPermission("modifyPublicCredentials"). Для изменения набора приватных учетных данных вызывающий объект должен иметь AuthPermission("modifyPrivateCredentials").
Сущность
public Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
Subject с принципалами и учетными данными. Принципалы и учетные данные из указанных наборов копируются в новосозданные наборы. Эти новосозданные наборы проверяют, установлен ли для этого Subject режим только для чтения, прежде чем разрешить последующие изменения. Новосозданные наборы также предотвращают незаконные изменения, гарантируя, что у вызывающего объекта есть достаточные права. Эти наборы также запрещают нулевые элементы, и попытки добавить, запросить или удалить нулевой элемент приведут к NullPointerException.
Для изменения набора принципалов вызывающий объект должен иметь AuthPermission("modifyPrincipals"). Для изменения набора общедоступных учетных данных вызывающий объект должен иметь AuthPermission("modifyPublicCredentials"). Для изменения набора приватных учетных данных вызывающий объект должен иметь AuthPermission("modifyPrivateCredentials").
- Параметры:
-
readOnly- true, еслиSubjectдолжен быть только для чтения, и false в противном случае. -
principals- наборSetпринципалов, которые должны быть ассоциированы с этимSubject. -
pubCredentials- наборSetобщедоступных учетных данных, которые должны быть ассоциированы с этимSubject. -
privCredentials- наборSetприватных учетных данных, которые должны быть ассоциированы с этимSubject. - Исключения:
-
NullPointerException- если указанныеprincipals,pubCredentials, илиprivCredentialsявляютсяnull, или в любом из этих трёх наборов существует нулевое значение.
Подробное описание методов
setReadOnly
public void setReadOnly()
Subject в состояние только для чтения. Изменения (добавления и удаления) в наборы Principal этого объекта Set и наборов полномочий будут запрещены. Операция destroy для наборов полномочий этого объекта все еще разрешена.
Попытки дальнейших изменений в наборы Principal и наборов полномочий объекта приведут к выбрасыванию IllegalStateException. Кроме того, после того, как Subject станет только для чтения, его нельзя будет перевести обратно в режим редактирования.
- Исключение:
-
SecurityException- если установлен менеджер безопасности, и у вызывающего объекта нет разрешенияAuthPermission("setReadOnly")установить этомуSubjectрежим только для чтения.
isReadOnly
public boolean isReadOnly()
Subject только для чтения.- Возвращает:
- true, если это
Subjectтолько для чтения, иначе false.
getSubject
@Deprecated(since="17", forRemoval=true) public static Subject getSubject(AccessControlContext acc)
AccessControlContext, который вместе с менеджером безопасности, устарел и подлежит удалению в будущей версии. Однако получение объекта Subject полезно независимо от менеджера безопасности. Поэтому был добавлен заменитель API под названием current(), который может быть использован для получения текущего субъекта.Subject , связанный с предоставленным AccessControlContext. AccessControlContext может содержать множество объектов Subject (из вложенных doAs вызовов). В такой ситуации возвращается самый последний Subject , связанный с AccessControlContext.
- Параметры:
-
acc-AccessControlContext, из которого извлечьSubject. - Возвращает:
Subject, связанный с предоставленнымAccessControlContext, илиnull, если с предоставленнымAccessControlContextне связан ни одинSubject.- Исключения:
-
SecurityException- если установлен менеджер безопасности и вызывающий элемент не имеет разрешенияAuthPermission("getSubject")для полученияSubject. -
NullPointerException- если предоставленныйAccessControlContextnull.
current
public static Subject current()
Текущий субъект устанавливается методом callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>). Когда вызывается callAs(subject, action), action выполняется с subject в качестве текущего субъекта, который можно получить с помощью этого метода. После завершения action, текущий субъект сбрасывается до своего предыдущего значения. Текущий субъект равен null до первого вызова callAs().
- Примечание об реализации:
- Этот метод возвращает то же значение, что и
Subject.getSubject(AccessController.getContext()). Это сохраняет совместимость с кодом, который может по-прежнему вызыватьdoAsдля установки субъекта вAccessControlContext. Это поведение может измениться в будущей версии. - Возвращает:
- текущий субъект или
nullв случае, если текущий субъект не установлен или текущий субъект установлен вnull. - С:
- 18
- См. также:
callAs
public static <T> T callAs(Subject subject, Callable<T> action) throws CompletionException
Callable с subject в качестве текущего субъекта.- Примечание об реализации:
- Этот метод вызывает
Subject.doAs(subject, altAction), который сохраняет субъект в новойAccessControlContext, гдеaltAction.run()эквивалентноaction.call(), а выброшенное исключение изменяется в соответствии со спецификацией данного метода. Это сохраняет совместимость с кодом, который может по-прежнему вызыватьgetSubject(AccessControlContext), извлекающий субъект изAccessControlContext. Это поведение может измениться в будущей версии. - Параметры типа:
-
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)
AccessControlContext, который в сочетании с менеджером безопасности, устарел и подлежит удалению в будущей версии. Однако выполнение работы как Subject полезно независимо от менеджера безопасности. Поэтому был добавлен заменяющий API под названием callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который можно использовать для выполнения той же работы.Subject. Этот метод сначала получает текущий AccessControlContext потока через AccessController.getContext, а затем создаёт новый AccessControlContext, используя полученный контекст вместе с новым SubjectDomainCombiner (созданным с помощью предоставленного Subject). Наконец, этот метод вызывает AccessController.doPrivileged, передавая ему предоставленный PrivilegedAction, а также только что созданный AccessControlContext.
- Type Parameters:
-
T- тип значения, возвращаемого методомrunPrivilegedAction. - Parameters:
-
subject-Subject, от имени которого будет выполняться указанныйaction. Этот параметр может бытьnull. -
action- код, который будет выполнен от имени указанногоSubject. - Returns:
- значение, возвращаемое методом
runPrivilegedAction. - Throws:
-
NullPointerException- еслиPrivilegedActionявляетсяnull. -
SecurityException- если установлен менеджер безопасности, и у вызывающего объекта нетAuthPermission("doAs")разрешения на вызов этого метода.
doAs
@Deprecated(since="18", forRemoval=true) public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
AccessControlContext, который в сочетании с менеджером безопасности, устарел и подлежит удалению в будущей версии. Однако выполнение работы от имени Subject полезно независимо от менеджера безопасности. Таким образом, был добавлен заменяющий API с именем callAs(javax.security.auth.Subject, java.util.concurrent.Callable<T>), который может использоваться для выполнения той же работы.Subject. Этот метод сначала извлекает текущий AccessControlContext потока с помощью AccessController.getContext, а затем создает новый AccessControlContext с использованием извлеченного контекста и нового SubjectDomainCombiner (созданного с использованием предоставленного Subject). Наконец, этот метод вызывает AccessController.doPrivileged, передавая ему предоставленный PrivilegedExceptionAction, а также недавно созданный AccessControlContext.
- Type Parameters:
-
T- тип значения, возвращаемого методомrunPrivilegedExceptionAction. - Parameters:
-
subject-Subject, от имени которого будет выполняться указанныйaction. Этот параметр может бытьnull. -
action- код, который должен быть выполнен от имени указанногоSubject. - Returns:
- значение, возвращаемое методом
runPrivilegedExceptionAction. - Throws:
-
PrivilegedActionException- если методPrivilegedExceptionAction.runвыбрасывает проверенное исключение. -
NullPointerException- если указанныйPrivilegedExceptionActionявляетсяnull. -
SecurityException- если установлен менеджер безопасности и у вызывающего объекта нетAuthPermission("doAs")разрешения для вызова этого метода.
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
Subject. Этот метод ведет себя точно так же, как Subject.doAs, за исключением того, что вместо получения текущего AccessControlContext потока он использует предоставленный AccessControlContext. Если предоставленный AccessControlContext является null, этот метод создает новый AccessControlContext с пустым набором ProtectionDomains.
- Type Parameters:
-
T- тип значения, возвращаемого методомrunPrivilegedAction. - Parameters:
-
subject-Subject, от имени которого будет выполнено указанноеaction. Этот параметр может бытьnull. -
action- код, который необходимо выполнить от имени указанногоSubject. -
acc-AccessControlContext, который будет связан с указанным subject и action. - Returns:
- значение, возвращённое методом
runPrivilegedAction. - Throws:
-
NullPointerException- еслиPrivilegedActionявляетсяnull. -
SecurityException- если установлен менеджер безопасности, и у вызывающего объекта нетAuthPermission("doAsPrivileged")разрешения для вызова этого метода.
doAsPrivileged
@Deprecated(since="17", forRemoval=true) public static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) throws PrivilegedActionException
Subject. Этот метод ведет себя точно как Subject.doAs, за исключением того, что вместо получения текущего AccessControlContext потока, он использует предоставленный AccessControlContext. Если предоставленный AccessControlContext является null, этот метод создает новый AccessControlContext с пустым набором ProtectionDomains.
- Type Parameters:
-
T- тип значения, возвращаемого методомrunPrivilegedExceptionAction. - Parameters:
-
subject-Subject, от имени которого будет выполняться указанныйaction. Этот параметр может бытьnull. -
action- код, который должен быть выполнен от имени указанногоSubject. -
acc-AccessControlContext, который будет привязан к указанному субъекту и действию. - Returns:
- значение, возвращаемое методом
runPrivilegedExceptionAction. - Throws:
-
PrivilegedActionException- если методPrivilegedExceptionAction.runвыбросил проверяемое исключение. -
NullPointerException- если указанныйPrivilegedExceptionActionявляетсяnull. -
SecurityException- если установлен менеджер безопасности и вызывающий объект не имеет разрешенияAuthPermission("doAsPrivileged")для вызова этого метода.
getPrincipals
public Set<Principal> getPrincipals()
Возвращаемый набор поддерживается внутренним набором принципалов субъекта. Любое изменение возвращаемого набора также влияет на внутренний набор принципалов.
Если установлен менеджер безопасности, вызывающий метод должен иметь разрешение AuthPermission("modifyPrincipals") для изменения возвращаемого набора, иначе будет брошено исключение.
- Возвращает:
- набор Принципалов, связанных с этим субъектом.
getPrincipals
public <T extends Principal> Set<T> getPrincipals(Class<T> c)
Возвращаемый набор не поддерживается внутренним набором принципалов субъекта. Для каждого вызова метода создается и возвращается новый набор. Изменения в возвращаемом наборе не повлияют на внутренний набор принципалов.
- Параметры типа:
-
T- тип класса, представленного принципалом - Параметры:
-
c- возвращаемый набор принципалов будет содержать только экземпляры этого класса. - Возвращает:
- набор Принципалов, которые являются экземплярами указанного класса.
- Исключения:
-
NullPointerException- если указанный класс является невалидным.
getPublicCredentials
public Set<Object> getPublicCredentials()
Set набора общедоступных учетных данных, хранящихся в этом Subject. Возвращаемый Set поддерживается внутренним набором общедоступных учетных данных субъекта Set. Любое изменение возвращаемого Set также повлияет на внутренний набор общедоступных учетных данных Set.
Если установлен менеджер безопасности, вызывающий метод должен обладать AuthPermission("modifyPublicCredentials") правом на изменение возвращаемого набора, в противном случае будет выброшено исключение SecurityException.
- Returns:
- набор
Setобщедоступных учетных данных, хранящихся в этомSubject.
getPrivateCredentials
public Set<Object> getPrivateCredentials()
Set набора закрытых учетных данных, хранящихся в этом Subject. Возвращаемый Set поддерживается внутренним набором закрытых учетных данных субъекта Set. Любое изменение возвращаемого Set также повлияет на внутренний набор закрытых учетных данных Set.
Если установлен менеджер безопасности, вызывающий метод должен обладать AuthPermission("modifyPrivateCredentials") правом на изменение возвращаемого набора, в противном случае будет выброшено исключение SecurityException.
При итерации по Set, если установлен менеджер безопасности и у вызывающего метода нет PrivateCredentialPermission доступа к конкретному учетному данным, будет выброшено исключение SecurityException. Тем не менее, итерация перейдет к следующему элементу в 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. Если установлен менеджер безопасности, вызывающий объект должен иметь PrivateCredentialPermission для доступа ко всем запрашиваемым учетным данным, в противном случае будет брошено исключение SecurityException.
Возвращаемый 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)
- Overrides:
-
equalsin classObject - Parameters:
-
o- Объект, который сравнивается на равенство с этим объектом Subject. - Returns:
- true, если указанный объект равен этому объекту Subject.
- Throws:
-
SecurityException- если установлен менеджер безопасности, и у вызывающего объекта нет разрешенияPrivateCredentialPermissionдля доступа к приватным учетным данным этого объекта Subject или предоставленного объекта Subject. - See Also:
toString
public String toString()
- Overrides:
-
toStringin classObject - Returns:
- строковое представление этого объекта Subject.
hashCode
public int hashCode()
- Overrides:
-
hashCodein classObject - Returns:
- хэш-код для этого объекта Subject.
- Throws:
-
SecurityException- если установлен менеджер безопасности, и у вызывающего объекта нет разрешенияPrivateCredentialPermissionдля доступа к приватным учетным данным данного объекта Subject. - See Also:
© 1993, 2023, 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/21/docs/api/java.base/javax/security/auth/Subject.html
AccessControlContext, который совместно с менеджером безопасности устарел и подлежит удалению в будущей версии.