Класс Subject
- java.lang.Object
-
- javax.security.auth.Subject
- Все реализованные интерфейсы:
- Serializable
public final class Subject extends Object implements Serializable
Объект Subject представляет собой группу связанной информации для отдельного сущности, например, человека. Такая информация включает идентификаторы субъекта, а также его атрибуты, связанные с безопасностью (например, пароли и криптографические ключи).
Субъекты могут потенциально иметь несколько идентификаторов. Каждый идентификатор представлен как Principal в рамках Subject. Принципы просто связывают имена с Subject. Например, субъект, который является человеком, Алисой, может иметь двух Принципов: один, который связывает «Алиса Бар», имя в её водительских правах, с Subject, и другой, который связывает «999-99-9999», номер её студенческого билета, с Subject. Оба Принципа относятся к одному и тому же Subject, несмотря на то, что у каждого есть другое имя.
Субъект также может владеть атрибутами, связанными с безопасностью, которые называются полномочиями. Конфиденциальные полномочия, требующие особой защиты, такие как закрытые криптографические ключи, хранятся в закрытом наборе полномочий Set. Полномочия, предназначенные для совместного использования, такие как сертификаты открытых ключей или билеты Kerberos-сервера, хранятся в открытом наборе полномочий Set. Для доступа и изменения различных наборов полномочий требуются разные разрешения.
Чтобы получить список всех Принципов, связанных с Subject, вызовите метод getPrincipals. Чтобы получить список всех публичных или закрытых полномочий, принадлежащих Subject, вызовите метод getPublicCredentials или getPrivateCredentials соответственно. Чтобы изменить возвращённые наборы Принципов и полномочий, используйте методы, определённые в классе 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.
- См. также:
-
Principal,DomainCombiner, Формат сериализации
Конструкторы
| Конструктор и описание |
|---|
Subject() Создаёт экземпляр |
Subject(boolean readOnly,
Set<? extends Principal> principals,
Set<?> pubCredentials,
Set<?> privCredentials) Создаёт экземпляр |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
static <T> T |
doAs(Subject subject,
PrivilegedAction<T> action) Выполняет работу как конкретный |
static <T> T |
doAs(Subject subject,
PrivilegedExceptionAction<T> action) Выполняет работу как конкретный |
static <T> T |
doAsPrivileged(Subject subject,
PrivilegedAction<T> action,
AccessControlContext acc) Выполняет привилегированную работу как конкретный |
static <T> T |
doAsPrivileged(Subject subject,
PrivilegedExceptionAction<T> action,
AccessControlContext acc) Выполняет привилегированную работу как конкретный |
boolean |
equals(Object o) Сравнивает указанный объект с этим |
Set<Principal> |
getPrincipals() Возвращает набор Принципов, связанных с этим |
<T extends Principal> |
getPrincipals(Class<T> c) Возвращает набор Принципов, связанных с этим |
Set<Object> |
getPrivateCredentials() Возвращает набор закрытых полномочий, принадлежащих этому |
<T> Set<T> |
getPrivateCredentials(Class<T> c) Возвращает набор закрытых полномочий, связанных с этим |
Set<Object> |
getPublicCredentials() Возвращает набор публичных полномочий, принадлежащих этому |
<T> Set<T> |
getPublicCredentials(Class<T> c) Возвращает набор публичных полномочий, связанных с этим |
static Subject |
getSubject(AccessControlContext acc) Получает |
int |
hashCode() Возвращает хэш-код для этого |
boolean |
isReadOnly() Определяет, является ли этот |
void |
setReadOnly() Устанавливает, что этот |
String |
toString() Возвращает строковое представление этого |
Методы, унаследованные от класса java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
Subject
public Subject()
Создайте экземпляр Subject с пустым Set принципалов и пустыми наборами общедоступных и частных учетных данных.
Новизна наборов проверяет, является ли этот Subject только для чтения, прежде чем разрешить последующие изменения. Созданные наборы также предотвращают незаконные изменения, гарантируя, что у вызывающего объекта есть достаточные разрешения.
Чтобы изменить набор принципалов, у вызывающего объекта должны быть AuthPermission("modifyPrincipals"). Чтобы изменить набор общедоступных учетных данных, у вызывающего объекта должны быть AuthPermission("modifyPublicCredentials"). Чтобы изменить набор частных учетных данных, у вызывающего объекта должны быть AuthPermission("modifyPrivateCredentials").
Subject
public Subject(boolean readOnly,
Set<? extends Principal> principals,
Set<?> pubCredentials,
Set<?> privCredentials) Создайте экземпляр Subject с принципалами и учетными данными.
Принципалы и учетные данные из указанных наборов копируются в новые созданные наборы. Эти вновь созданные наборы проверяют, является ли этот Subject только для чтения, прежде чем разрешить последующие изменения. Созданные наборы также предотвращают незаконные изменения, гарантируя, что у вызывающего объекта есть достаточные разрешения.
Чтобы изменить набор принципалов, у вызывающего объекта должны быть AuthPermission("modifyPrincipals"). Чтобы изменить набор общедоступных учетных данных, у вызывающего объекта должны быть AuthPermission("modifyPublicCredentials"). Чтобы изменить набор частных учетных данных, у вызывающего объекта должны быть AuthPermission("modifyPrivateCredentials").
- Parameters:
-
readOnly- true, еслиSubjectдолжен быть только для чтения, и false в противном случае. -
principals-Setпринципалов, которые должны быть ассоциированы с этимSubject. -
pubCredentials-Setобщедоступных учетных данных, которые должны быть ассоциированы с этимSubject. -
privCredentials-Setчастных учетных данных, которые должны быть ассоциированы с этимSubject. - Throws:
-
NullPointerException- если указанныеprincipals,pubCredentials, илиprivCredentialsявляютсяnull.
Методы
setReadOnly
public void setReadOnly()
Установить этот Subject только для чтения.
Изменения (добавления и удаления) в наборах принципалов и учетных данных этого Subject будут запрещены. Операция destroy для учетных данных этого Subject по-прежнему разрешена.
Попытки изменить наборы принципалов и учетных данных Subject приведут к выбрасыванию IllegalStateException . Кроме того, после того как Subject станет только для чтения, его нельзя будет сделать снова доступным для записи.
- Throws:
-
SecurityException- если у вызывающего объекта нет разрешения на установку этогоSubjectтолько для чтения.
isReadOnly
public boolean isReadOnly()
Запрос, является ли этот Subject только для чтения.
- Returns:
- true, если этот
Subjectтолько для чтения, false в противном случае.
getSubject
public static Subject getSubject(AccessControlContext acc)
Получить Subject , связанный с предоставленным AccessControlContext.
AccessControlContext может содержать много субъектов (из вложенных вызовов doAs). В этом случае возвращается самый последний Subject , связанный с AccessControlContext.
- Parameters:
-
acc-AccessControlContextдля полученияSubject. - Returns:
- связанный с предоставленным
AccessControlContext, илиnullесли с предоставленнымAccessControlContextне связан ни одинSubject. - Throws:
-
SecurityException- если у вызывающего объекта нет разрешения получитьSubject. -
NullPointerException- если предоставленныйAccessControlContextявляетсяnull.
doAs
public static <T> T doAs(Subject subject,
PrivilegedAction<T> action) Выполнение работы от имени конкретного 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- если у вызывающего объекта нет разрешения вызвать этот метод.
doAs
public static <T> T doAs(Subject subject,
PrivilegedExceptionAction<T> action)
throws PrivilegedActionException Выполнение работы от имени конкретного 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- если у вызывающего объекта нет разрешения вызвать этот метод.
doAsPrivileged
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- если у вызывающего объекта нет разрешения вызвать этот метод.
doAsPrivileged
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, который будет связан с указанным subject и action. - Returns:
- значение, возвращаемое методом
runPrivilegedExceptionAction. - Throws:
-
PrivilegedActionException- если методPrivilegedExceptionAction.runвыбрасывает обработанное исключение. -
NullPointerException- если указанноеPrivilegedExceptionActionявляетсяnull. -
SecurityException- если у вызывающего объекта нет разрешения вызвать этот метод.
getPrincipals
public Set<Principal> getPrincipals()
Возвращает Set принципалов, связанных с этим Subject. Каждый Principal представляет собой идентификатор для этого Subject.
Возвращаемый Set поддерживается внутренним Principal Set этого Subject. Любое изменение возвращаемого Set влияет и на внутренний Principal Set.
- Returns:
- The
Setпринципалов, связанных с этимSubject.
getPrincipals
public <T extends Principal> Set<T> getPrincipals(Class<T> c)
Возвращает Set объектов Principals, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.
Возвращаемое Set не поддерживается внутренними Principal Set данного объекта Subject. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние Principal Set.
- Type Parameters:
-
T- тип класса, моделируемогоc - Parameters:
-
c- все возвращаемыеSetобъектов Principals будут экземплярами этого класса. - Returns:
- a
Setобъектов Principals, которые являются экземплярами указанногоClass. - Throws:
-
NullPointerException- если указанныйClassявляетсяnull.
getPublicCredentials
public Set<Object> getPublicCredentials()
Возвращает Set общедоступных идентификационных данных, хранящихся в этом Subject.
Возвращаемое Set поддерживается внутренними общедоступными идентификационными данными Credential Set объекта Subject. Любые изменения в возвращаемом Set также влияют на внутренние общедоступные идентификационные данные Credential Set.
- Returns:
- A
Setобщедоступных идентификационных данных, хранящихся в этомSubject.
getPrivateCredentials
public Set<Object> getPrivateCredentials()
Возвращает Set закрытых идентификационных данных, хранящихся в этом Subject.
Возвращаемое Set поддерживается внутренними закрытыми идентификационными данными Credential Set объекта Subject. Любые изменения в возвращаемом Set также влияют на внутренние закрытые идентификационные данные Credential Set.
Для доступа к идентификационным данным в возвращаемом Set, или для их изменения, требуется разрешение у вызывающей стороны. Если у вызывающей стороны нет соответствующего разрешения, выбрасывается SecurityException.
Во время итерации по Set, если у вызывающей стороны нет разрешения на доступ к конкретному идентификационному данному, выбрасывается SecurityException. Тем не менее, итерация переходит к следующему элементу в Set.
- Returns:
- A
Setзакрытых идентификационных данных, хранящихся в этомSubject.
getPublicCredentials
public <T> Set<T> getPublicCredentials(Class<T> c)
Возвращает Set общедоступных идентификационных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.
Возвращаемое Set не поддерживается внутренними общедоступными идентификационными данными Credential Set объекта Subject. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние общедоступные идентификационные данные Credential 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.
Вызывающая сторона должна иметь разрешение на доступ ко всем запрашиваемым идентификационным данным, иначе будет выброшено исключение SecurityException.
Возвращаемое Set не поддерживается внутренними закрытыми идентификационными данными Credential Set объекта Subject. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние закрытые идентификационные данные Credential 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 равны.
- Overrides:
-
equalsв классеObject - Parameters:
-
o- объект для сравнения на равенство с этимSubject. - Returns:
- true, если указанный объект равен этому
Subject. - Throws:
-
SecurityException- если у вызывающей стороны нет разрешения на доступ к закрытым идентификационным данным данногоSubject, или если у вызывающей стороны нет разрешения на доступ к закрытым идентификационным данным предоставленногоSubject. - See Also:
-
Object.hashCode(),HashMap
toString
public String toString()
Возвращает строковое представление этого Subject.
hashCode
public int hashCode()
Возвращает хэш-код для этого Subject.
- Overrides:
-
hashCodeв классеObject - Returns:
- хэш-код для этого
Subject. - Throws:
-
SecurityException- если у вызывающей стороны нет разрешения на доступ к закрытым идентификационным данным этого объекта Subject. - See Also:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
© 1993, 2020, 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.