Класс 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. Например:

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.

С момента:
1.4
См. также:
Principal, DomainCombiner, Формат сериализации

Конструкторы

Конструктор Описание
Subject()

Создаёт экземпляр Subject с пустым набором принципов и пустым наборами общедоступных и закрытых данных.

Subject​(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)

Создаёт экземпляр Subject с принципами и данными.

Методы

Модификатор и тип Метод Описание
static <T> T doAs​(Subject subject, PrivilegedAction<T> action)

Выполнение работы в качестве конкретного Subject.

static <T> T doAs​(Subject subject, PrivilegedExceptionAction<T> action)

Выполнение работы в качестве конкретного Subject.

static <T> T doAsPrivileged​(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)

Выполнение привилегированной работы в качестве конкретного Subject.

static <T> T doAsPrivileged​(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc)

Выполнение привилегированной работы в качестве конкретного Subject.

boolean equals​(Object o)

Сравнение указанного объекта с этим Subject на равенство.

Set<Principal> getPrincipals()

Возвращает набор принципов, связанных с этим Subject.

<T extends Principal>
Set<T>
getPrincipals​(Class<T> c)

Возвращает набор принципов, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Set<Object> getPrivateCredentials()

Возвращает набор закрытых данных, хранимых этим Subject.

<T> Set<T> getPrivateCredentials​(Class<T> c)

Возвращает набор закрытых данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Set<Object> getPublicCredentials()

Возвращает набор общедоступных данных, хранимых этим Subject.

<T> Set<T> getPublicCredentials​(Class<T> c)

Возвращает набор общедоступных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

static Subject getSubject​(AccessControlContext acc)

Получить Subject, связанный с предоставленным AccessControlContext.

int hashCode()

Возвращает хэш-код для этого Subject.

boolean isReadOnly()

Определяет, является ли этот Subject только для чтения.

void setReadOnly()

Установить этот Subject как только для чтения.

String toString()

Возвращает строковое представление этого Subject.

Методы, объявленные в классе java.lang.Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Конструкторы

Subject

public Subject()

Создаёт экземпляр Subject с пустым набором принципов и пустым наборами общедоступных и закрытых данных.

Недавно созданные наборы проверяют, установлен ли для этого Subject режим только для чтения, прежде чем разрешить последующие изменения. Недавно созданные наборы также предотвращают незаконные изменения, обеспечивая, что у вызывающей стороны есть достаточные разрешения. Эти наборы также запрещают нулевые элементы, и попытки добавить или запросить нулевой элемент приведут к NullPointerException.

Для изменения набора принципов у вызывающей стороны должны быть AuthPermission("modifyPrincipals"). Для изменения набора общедоступных данных у вызывающей стороны должны быть AuthPermission("modifyPublicCredentials"). Для изменения набора закрытых данных у вызывающей стороны должны быть AuthPermission("modifyPrivateCredentials").

Subject

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 - набор принципов, которые должны быть связаны с этим Subject.
pubCredentials - набор общедоступных данных, которые должны быть связаны с этим Subject.
privCredentials - набор закрытых данных, которые должны быть связаны с этим Subject.
Исключения:
NullPointerException - если указанный principals, pubCredentials, или privCredentials являются null, или если в любом из этих трёх наборов существует нулевое значение.

Методы

setReadOnly

public void setReadOnly()

Установить данному Subject статус только для чтения.

Изменения (добавление и удаление) для набора Principal и наборов идентификаторов данного субъекта будут запрещены. Операции с destroy для идентификаторов данного субъекта все ещё разрешены.

Попытки последующих изменений набора Principal и наборов идентификаторов приведут к выбрасыванию исключения IllegalStateException. Кроме того, после того как Subject будет установлен в режим только для чтения, его нельзя будет переключить в режим редактирования.

Исключения:
SecurityException - если установлен менеджер безопасности и у вызывающего объекта нет AuthPermission("setReadOnly") разрешения для установки данного Subject в режим только для чтения.

isReadOnly

public boolean isReadOnly()

Запрос о том, находится ли этот Subject в режиме только для чтения.

Возвращает:
true, если этот Subject находится в режиме только для чтения, иначе false.

getSubject

public static Subject getSubject(AccessControlContext acc)

Получить Subject по заданному AccessControlContext.

AccessControlContext может содержать несколько субъектов (из вложенных вызовов doAs). В этом случае возвращается последний Subject связанный с AccessControlContext.

Параметры:
acc - AccessControlContext для извлечения Subject.
Возвращает:
Subject по заданному AccessControlContext, или null, если Subject не связан с заданным AccessControlContext.
Исключения:
SecurityException - если установлен менеджер безопасности и у вызывающего объекта нет AuthPermission("getSubject") разрешения на получение 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.

Параметры типа:
T - тип значения, возвращаемого методом run объекта PrivilegedAction.
Параметры:
subject - Subject, от имени которого будет выполняться указанное действие action. Этот параметр может быть null.
action - код, который будет выполнен от имени указанного Subject.
Возвращает:
значение, возвращаемое методом run объекта PrivilegedAction.
Исключения:
NullPointerException - если PrivilegedAction null.
SecurityException - если установлен менеджер безопасности и у вызывающего объекта нет AuthPermission("doAs") разрешения для вызова этого метода.

doAs

public static <T> T doAs(Subject subject,
                         PrivilegedExceptionAction<T> action)
                  throws PrivilegedActionException

Выполнить работу от имени конкретного Subject.

Этот метод сначала получает AccessControlContext текущего потока через AccessController.getContext, затем создаёт новый AccessControlContext, используя полученный контекст вместе с новым SubjectDomainCombiner (созданным с использованием предоставленного Subject). Наконец, этот метод вызывает AccessController.doPrivileged, передавая ему предоставленный PrivilegedExceptionAction и вновь созданный AccessControlContext.

Параметры типа:
T - тип значения, возвращаемого методом run объекта PrivilegedExceptionAction.
Параметры:
subject - Subject, от имени которого будет выполняться указанное действие action. Этот параметр может быть null.
action - код, который будет выполнен от имени указанного Subject.
Возвращает:
значение, возвращаемое методом run объекта PrivilegedExceptionAction.
Исключения:
PrivilegedActionException - если метод PrivilegedExceptionAction.run выбрасывает checked исключение.
NullPointerException - если указанный PrivilegedExceptionAction null.
SecurityException - если установлен менеджер безопасности и у вызывающего объекта нет AuthPermission("doAs") разрешения для вызова этого метода.

doAsPrivileged

public static <T> T doAsPrivileged(Subject subject,
                                   PrivilegedAction<T> action,
                                   AccessControlContext acc)

Выполнить привилегированную работу от имени конкретного Subject.

Этот метод работает точно так же, как Subject.doAs, за исключением того, что вместо получения AccessControlContext текущего потока, он использует предоставленный AccessControlContext. Если предоставленный AccessControlContext null, этот метод создаёт новый AccessControlContext с пустым набором ProtectionDomains.

Параметры типа:
T - тип значения, возвращаемого методом run объекта PrivilegedAction.
Параметры:
subject - Subject, от имени которого будет выполняться указанное действие action. Этот параметр может быть null.
action - код, который будет выполнен от имени указанного Subject.
acc - AccessControlContext для привязки к указанному субъекту и действию.
Возвращает:
значение, возвращаемое методом run объекта PrivilegedAction.
Исключения:
NullPointerException - если PrivilegedAction null.
SecurityException - если установлен менеджер безопасности и у вызывающего объекта нет AuthPermission("doAsPrivileged") разрешения для вызова этого метода.

doAsPrivileged

public static <T> T doAsPrivileged(Subject subject,
                                   PrivilegedExceptionAction<T> action,
                                   AccessControlContext acc)
                            throws PrivilegedActionException

Выполнить привилегированную работу от имени конкретного Subject.

Этот метод работает точно так же, как Subject.doAs, за исключением того, что вместо получения AccessControlContext текущего потока, он использует предоставленный AccessControlContext. Если предоставленный AccessControlContext null, этот метод создаёт новый AccessControlContext с пустым набором ProtectionDomains.

Параметры типа:
T - тип значения, возвращаемого методом run объекта PrivilegedExceptionAction.
Параметры:
subject - Subject, от имени которого будет выполняться указанное действие action. Этот параметр может быть null.
action - код, который будет выполнен от имени указанного Subject.
acc - AccessControlContext для привязки к указанному субъекту и действию.
Возвращает:
значение, возвращаемое методом run объекта PrivilegedExceptionAction.
Исключения:
PrivilegedActionException - если метод PrivilegedExceptionAction.run выбрасывает checked исключение.
NullPointerException - если указанный PrivilegedExceptionAction null.
SecurityException - если установлен менеджер безопасности и у вызывающего объекта нет AuthPermission("doAsPrivileged") разрешения для вызова этого метода.

getPrincipals

public Set<Principal> getPrincipals()

Возвращает множество Set связанных с этим Subject. Каждый Principal представляет идентичность для этого Subject.

Возвращаемое множество подкрепляется внутренней коллекцией Principal Set данного субъекта. Любые изменения в возвращаемом множестве влияют на внутреннюю коллекцию Principal Set.

Если установлен менеджер безопасности, вызывающий объект должен иметь разрешение AuthPermission("modifyPrincipals") для изменения возвращаемого множества, в противном случае будет выбрашено исключение SecurityException.

Возвращает:
множество Set связанных с этим Subject.

getPrincipals

public <T extends Principal> Set<T> getPrincipals(Class<T> c)

Возвращает множество Set Subject связанных с этим Subject и являющихся экземплярами или подклассами указанного Class.

Возвращаемое множество не подкрепляется внутренней коллекцией Principal Set субъекта. Для каждого вызова метода создаётся и возвращается новое множество Set . Изменения в возвращаемом множестве не влияют на внутреннюю коллекцию Principal Set.

Параметры типа:
T - тип класса, представляемого c
Параметры:
c - возвращаемое множество Set будут экземплярами этого класса.
Возвращает:
множество Set являющихся экземплярами указанного Class.
Исключения:
NullPointerException - если указанный Class null.

getPublicCredentials

public Set<Object> getPublicCredentials()

Возвращает множество Set публичных идентификаторов, хранящихся в этом Subject.

Возвращаемое множество подкрепляется внутренней коллекцией публичных идентификаторов Set этого субъекта. Любые изменения в возвращаемом множестве влияют на внутреннюю коллекцию публичных идентификаторов Set.

Если установлен менеджер безопасности, вызывающий объект должен иметь разрешение AuthPermission("modifyPublicCredentials") для изменения возвращаемого множества, в противном случае будет выбрашено исключение SecurityException.

Возвращает:
множество Set публичных идентификаторов, хранящихся в этом Subject.

getPrivateCredentials

public Set<Object> getPrivateCredentials()

Возвращает Set частных учетных данных, содержащихся в этом Subject.

Возвращаемое Set подкрепляется внутренними частными учетными данными Set этого субъекта. Любое изменение возвращаемого Set также влияет на внутренние частные учетные данные Set.

Если установлен менеджер безопасности, вызывающему методу необходимо иметь разрешение AuthPermission("modifyPrivateCredentials") для изменения возвращаемого набора, в противном случае будет брошено исключение SecurityException.

При итерации по Set, если установлен менеджер безопасности и у вызывающего метода нет разрешения PrivateCredentialPermission для доступа к определенным учетным данным, будет брошено исключение SecurityException. Тем не менее, итерация перейдет к следующему элементу в Set.

Возвращает:
a Set частных учетных данных, содержащихся в этом Subject.

getPublicCredentials

public <T> Set<T> getPublicCredentials(Class<T> c)

Возвращает Set общедоступных учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Возвращаемое Set не подкрепляется внутренними общедоступными учетными данными Set этого субъекта. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние общедоступные учетные данные Set.

Type Parameters:
T - тип класса, моделируемого c
Parameters:
c - все возвращаемые Set общедоступных учетных данных будут экземплярами этого класса.
Возвращает:
a Set общедоступных учетных данных, являющихся экземплярами указанного Class.
Исключение:
NullPointerException - если указанный Class является null.

getPrivateCredentials

public <T> Set<T> getPrivateCredentials(Class<T> c)

Возвращает Set частных учетных данных, связанных с этим Subject, которые являются экземплярами или подклассами указанного Class.

Если установлен менеджер безопасности, вызывающий метод должен иметь разрешение PrivateCredentialPermission на доступ ко всем запрашиваемым учетным данным, в противном случае будет брошено исключение SecurityException.

Возвращаемое Set не подкрепляется внутренними частными учетными данными Set этого субъекта. Для каждого вызова метода создается и возвращается новый Set. Изменения в возвращаемом Set не повлияют на внутренние частные учетные данные Set.

Type Parameters:
T - тип класса, моделируемого c
Parameters:
c - все возвращаемые Set частных учетных данных будут экземплярами этого класса.
Возвращает:
a Set частных учетных данных, являющихся экземплярами указанного Class.
Исключение:
NullPointerException - если указанный Class является null.

equals

public boolean equals(Object o)

Сравнивает указанный объект с этим Subject на равенство. Возвращает true, если данный объект также является субъектом и два объекта Subject эквивалентны. Более формально, два объекта Subject равны, если их наборы Principal и Credential равны.

Overrides:
equals в классе Object
Parameters:
o - Объект, который необходимо сравнить на равенство с этим Subject.
Возвращает:
true, если указанный объект равен этому Subject.
Исключение:
SecurityException - если установлен менеджер безопасности и у вызывающего метода нет разрешения PrivateCredentialPermission на доступ к частным учетным данным этого Subject или предоставленного Subject.
См. также:
Object.hashCode(), HashMap

toString

public String toString()

Возвращает строковое представление этого Subject.

Overrides:
toString в классе Object
Возвращает:
строковое представление этого Subject.

hashCode

public int hashCode()

Возвращает хэш-код для этого Subject.

Overrides:
hashCode в классе Object
Возвращает:
хэш-код для этого Subject.
Исключение:
SecurityException - если установлен менеджер безопасности и у вызывающего метода нет разрешения PrivateCredentialPermission на доступ к частным учетным данным этого субъекта.
См. также:
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/Subject.html

Spec-Zone .ru
спецификации, руководства, описания, API