Subject 表示某一项(如一个人)的一组相关信息。此类信息包括 Subject 的身份,以及与安全相关的属性(例如,密码和加密密钥)。
Subject 可以潜在地具有多重身份。每个身份被表示为 Subject 中的一个 Principal。Principal 只是把名称绑定到 Subject。例如,Subject 正好是一个人(Alice)时,它可以有两个主体:一个把她驾驶证上的名称 "Alice Bar" 绑定到 Subject,另一个把学生身份证上的号码 "999-99-9999" 绑定到 Subject。即使每个主体具有不同的名称,它们也都指的是同一个 Subject。
Subject 也可以拥有与安全相关的属性,它们被称为证书。敏感的证书需要特殊的保护,例如私有加密密钥存储在私有的证书 Set 中。将证书设计为共享的,例如公钥证书或 Kerberos 服务票据存储在一个公开证书 Set 中。访问和修改不同的证书 Set 需要不同的权限。
要获取与 Subject 关联的所有 Principal,请调用 getPrincipals 方法。要获取属于一个 Subject 的所有公开的或私有的证书,请分别调用 getPublicCredentials 方法或getPrivateCredentials 方法。要修改返回的 Principal 和证书的 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 关联的 Principal 是已序列化的,与 Subject 关联的证书不是已序列化的。注意,java.security.Principal 类不会实现Serializable。因此,与 Subject 关联的所有具体的 Principal 实现必须实现 Serializable。
-
另请参见:
- Principal, DomainCombiner, 序列化表格
| 构造方法摘要 | |
|---|---|
Subject() 创建一个带有空的 Principal Set 和空的公开或私有证书 Set 的 Subject 的一个实例。 | |
Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials) 创建带有 Principal 和证书的 Subject 的实例。 | |
| 方法摘要 | ||
|---|---|---|
static
| doAs(Subject subject, PrivilegedAction<T> action) 作为特定的 Subject 的功能。 | |
static
| doAs(Subject subject, PrivilegedExceptionAction<T> action) 作为特定的 Subject 的功能。 | |
static
| doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc) 作为特定的 Subject 的特权功能。 | |
static
| doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) 作为特定的 Subject 的特权功能。 | |
boolean | equals(Object o) 比较指定对象与此 Subject 的相等性。 | |
Set<Principal> | getPrincipals() 返回与此 Subject 关联的 Principal Set。 | |
| getPrincipals(Class<T> c) 返回与此 Subject 关联的 Principal Set,它是指定的 Class 的实例或子类。 | |
Set<Object> | getPrivateCredentials() 返回此 Subject 中包含的私有证书 Set。 | |
| getPrivateCredentials(Class<T> c) 返回与此 Subject关联的私有证书 Set,它是指定的 Class 的实例或子类。 | |
Set<Object> | getPublicCredentials() 返回此 Subject 中包含的公开证书 Set。 | |
| getPublicCredentials(Class<T> c) 返回与此 Subject 关联的公开证书 Set,它是指定的 Class 的实例或子类。 | |
static Subject | getSubject(AccessControlContext acc) 获取与提供的 AccessControlContext 关联的 Subject。 | |
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()
- 创建一个带有空的 Principal
Set和空的公开或私有证书 Set 的Subject的一个实例。在新构建的 Set 允许进行后续修改前检查此
Subject是否已设置为只读的。新创建的 Set 还通过确保调用者具有足够权限的方式来防止非法修改。要修改 Principal Set,调用者必须具有
AuthPermission("modifyPrincipals")权限。要修改公开证书 Set,调用者必须具有AuthPermission("modifyPublicCredentials")权限。要修改私有证书 Set,调用者必须具有AuthPermission("modifyPrivateCredentials")权限。
Subject
public Subject(boolean readOnly,
Set<? extends Principal> principals,
Set<?> pubCredentials,
Set<?> privCredentials)
- 创建带有 Principal 和证书的
Subject的实例。指定将 Set 中的 Principal 和证书复制到新构建的 Set 中。在新创建的 Set 允许进行后续修改前检查此
Subject是否已设置为只读的。新创建的 Set 还通过确保调用者具有足够权限的方式来防止非法修改。要修改 Principal Set,调用者必须具有
AuthPermission("modifyPrincipals")权限。要修改公开证书 Set,调用者必须具有AuthPermission("modifyPublicCredentials")权限。要修改私有证书 Set,调用者必须具有AuthPermission("modifyPrivateCredentials")权限。-
参数:
readOnly- 如果Subject是只读的,则参数为 true,否则为 false。principals- 要与此Subject关联的 PrincipalSet。pubCredentials- 要与此Subject关联的公开证书Set。privCredentials- 要与此Subject关联的私有证书Set。 抛出:NullPointerException- 如果指定的principals、pubCredentials或privCredentials为null。
| 方法详细信息 |
|---|
setReadOnly
public void setReadOnly()
- 将此
Subject设置为只读的。对此 Subject 的
PrincipalSet和证书 Set 的修改(添加和移除)将是不允许的。仍然允许在此 Subject 的证书上进行destroy操作。如果后续企图修改 Subject 的
Principal和证书 Set,将导致抛出IllegalStateException。另外,一旦Subject是只读的,就不可能再将它重新设置为可写的。 -
-
-
抛出:
SecurityException- 如果调用者不具有将此Subject设置为只读的权限。
isReadOnly
public boolean isReadOnly()
- 查询此
Subject是否为只读的。 -
-
-
返回:
- 如果此
Subject为只读的,则返回 true;否则,返回 false。
- 如果此
getSubject
public static Subject getSubject(AccessControlContext acc)
- 获取与提供的
AccessControlContext关联的Subject。AccessControlContext可以包含很多 Subject(从嵌套的doAs调用得到)。在这种情况下,返回与AccessControlContext关联的最近的Subject。 -
-
-
参数:
acc-AccessControlContext,从它获取Subject。 返回:- 与所提供的
AccessControlContext关联的Subject,如果没有Subject与提供的AccessControlContext相关联,则返回null。 抛出: SecurityException- 如果调用者不具有获取此Subject的权限。NullPointerException- 如果提供的AccessControlContext为null。
doAs
public static <T> T doAs(Subject subject,
PrivilegedAction<T> action)
- 作为特定的
Subject的功能。此方法首先通过
AccessController.getContext获取当前 Thread 的AccessControlContext,接着使用获得的上下文与新的SubjectDomainCombiner(使用提供的Subject构建)实例化一个AccessControlContext。最后,此方法调用AccessController.doPrivileged,将提供的PrivilegedAction以及新构建的AccessControlContext传递到AccessController.doPrivileged。 -
-
-
参数:
subject- 指定的action将作为该Subject运行。此参数可以为null。action- 将作为指定的Subject运行的代码。 返回:- PrivilegedAction 的
run方法所返回的值。 抛出: NullPointerException- 如果PrivilegedAction为null。SecurityException- 如果调用者不具有调用此方法的权限。
doAs
public static <T> T doAs(Subject subject,
PrivilegedExceptionAction<T> action)
throws PrivilegedActionException
- 作为特定的
Subject的功能。此方法首先通过
AccessController.getContext获取当前 Thread 的AccessControlContext,接着使用获得的上下文与新的SubjectDomainCombiner(使用提供的Subject构建)实例化一个AccessControlContext。最后,此方法调用AccessController.doPrivileged,将提供的PrivilegedExceptionAction以及新构建的AccessControlContext传递到AccessController.doPrivileged。 -
-
-
参数:
subject- 指定的action将作为该Subject运行。此参数可以为null。action- 将作为指定的Subject运行的代码。 返回:- PrivilegedExceptionAction 的
run方法所返回的值。 抛出: PrivilegedActionException- 如果PrivilegedExceptionAction.run方法抛出经过检查的异常。NullPointerException- 如果指定的PrivilegedExceptionAction为null。SecurityException- 如果调用者不具有调用此方法的权限。
doAsPrivileged
public static <T> T doAsPrivileged(Subject subject,
PrivilegedAction<T> action,
AccessControlContext acc)
- 作为特定的
Subject的特权功能。除了使用提供的
AccessControlContext,而不是获取当前 Thread 的AccessControlContext外,此方法的行为与Subject.doAs完全一样。如果提供的AccessControlContext为null,则此方法实例化一个新的带有空 ProtectionDomains 集合的AccessControlContext。 -
-
-
参数:
subject- 指定的action将作为该Subject运行。此参数可以为null。action- 将作为指定的Subject运行的代码。acc- 限制为指定 subject 和 action 的AccessControlContext。 返回:- PrivilegedAction 的
run方法所返回的值。 抛出: NullPointerException- 如果PrivilegedAction为null。SecurityException- 如果调用者不具有调用此方法的权限。
doAsPrivileged
public static <T> T doAsPrivileged(Subject subject,
PrivilegedExceptionAction<T> action,
AccessControlContext acc)
throws PrivilegedActionException
- 作为特定的
Subject的特权功能。除了使用提供的
AccessControlContext,而不是获取当前 Thread 的AccessControlContext外,此方法的行为与Subject.doAs完全一样。如果提供的AccessControlContext为null,则此方法实例化一个新的带有空 ProtectionDomains 集合的AccessControlContext。 -
-
-
参数:
subject- 指定的action将作为该Subject运行。此参数可以为null。action- 将作为指定的Subject运行的代码。acc- 限制为指定 subject 和 action 的AccessControlContext。 返回:- PrivilegedExceptionAction 的
run方法所返回的值。 抛出: PrivilegedActionException- 如果PrivilegedExceptionAction.run方法抛出经过检查的异常。NullPointerException- 如果指定的PrivilegedExceptionAction为null。SecurityException- 如果调用者不具有调用此方法的权限。
getPrincipals
public Set<Principal> getPrincipals()
- 返回与此
Subject关联的 PrincipalSet。每个Principal表示此Subject的一个身份。此 Subject 的内部
PrincipalSet支持返回的Set。对返回的Set的任何修改也影响内部的PrincipalSet。 -
-
-
返回:
- 与此
Subject关联的 PrincipalSet。
- 与此
getPrincipals
public <T extends Principal> Set<T> getPrincipals(Class<T> c)
- 返回与此
Subject关联的 PrincipalSet,它是指定的Class的实例或子类。此 Subject 的内部
PrincipalSet不支持返回的Set。每次方法调用都创建和返回一个新的Set。对返回的Set的修改不影响内部的PrincipalSet。 -
-
-
参数:
c- 返回的 PrincipalSet将都是此类的实例。 返回:- 是指定的
Class的实例的 PrincipalSet。 抛出: NullPointerException- 如果指定的Class为null。
getPublicCredentials
public Set<Object> getPublicCredentials()
- 返回此
Subject中包含的公开证书Set。此 Subject 的内部公开证书
Set支持返回的Set。对返回的Set的任何修改也影响内部公开证书Set。 -
-
-
返回:
- 此
Subject中包含的公开证书Set。
- 此
getPrivateCredentials
public Set<Object> getPrivateCredentials()
- 返回此
Subject中包含的私有证书Set。此 Subject 的内部私有证书
Set支持返回的Set。对返回的Set的任何修改也影响内部私有证书Set。调用者需要权限来访问返回的
Set中的证书,或修改Set本身。如果调用者不具有正确的权限,则会抛出SecurityException。当迭代
Set时,如果调用者不具有访问特定证书的权限,则抛出SecurityException。Iterator仍然是前移到Set中的下一个元素。 -
-
-
返回:
- 此
Subject中包含的私有证书Set。
- 此
getPublicCredentials
public <T> Set<T> getPublicCredentials(Class<T> c)
- 返回与此
Subject关联的公开证书Set,它是指定的Class的实例或子类。此 Subject 的内部公开证书
Set不支持返回的Set。每次方法调用都创建和返回一个新的Set。对返回的Set的修改不影响内部公开证书Set。 -
-
-
参数:
c- 返回的公开证书Set将都是此类的实例。 返回:- 是指定的
Class的实例的公开证书Set。 抛出: NullPointerException- 如果指定的Class为null。
getPrivateCredentials
public <T> Set<T> getPrivateCredentials(Class<T> c)
- 返回与此
Subject关联的私有证书Set,它是指定的Class的实例或子类。调用者必须具有访问所有请求证书的权限,否则将抛出
SecurityException。此 Subject 的内部私有证书
Set不支持返回的Set。每次方法调用都创建和返回一个新的Set。对返回的Set的修改不影响内部私有证书Set。 -
-
-
参数:
c- 返回的私有证书Set将都是此类的实例。 返回:- 是指定的
Class的实例的私有证书Set。 抛出: NullPointerException- 如果指定的Class为null。
equals
public boolean equals(Object o)
- 比较指定对象与此
Subject的相等性。如果给定对象也是一个 Subject 并且两个Subject是等效的,则返回 true。更正式地说,如果两个Subject的Principal和CredentialSet 是相等的,则它们的实例就是相等的。 -
-
覆盖:
- 类
Object中的equals
- 类
-
-
参数:
o- 要与此Subject进行相等性比较的对象。 返回:- 如果指定的对象与此
Subject相等,则返回 true。 抛出: SecurityException- 如果调用者不具有访问此Subject的私有证书的权限,或者如果调用者不具有访问所提供的Subject的私有证书的权限。 另请参见:- Object.hashCode(), Hashtable
toString
public String toString()
- 返回此
Subject的字符串表示形式。 -
-
覆盖:
- 类
Object中的toString
- 类
-
-
返回:
- 此
Subject的字符串表示形式。
- 此
hashCode
public int hashCode()
- 返回此
Subject的哈希码。 -
-
覆盖:
- 类
Object中的hashCode
- 类
-
-
返回:
- 此
Subject的哈希码。 抛出: SecurityException- 如果调用者不具有访问此 Subject 的私有证书的权限。
- 此
827

被折叠的 条评论
为什么被折叠?



