|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjavax.security.auth.Subject
public final class Subject
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 |
| 构造方法详细信息 |
|---|
public Subject()
Set 和空的公开或私有证书 Set 的 Subject 的一个实例。
在新构建的 Set 允许进行后续修改前检查此 Subject 是否已设置为只读的。新创建的 Set 还通过确保调用者具有足够权限的方式来防止非法修改。
要修改 Principal Set,调用者必须具有 AuthPermission("modifyPrincipals") 权限。要修改公开证书 Set,调用者必须具有 AuthPermission("modifyPublicCredentials") 权限。要修改私有证书 Set,调用者必须具有 AuthPermission("modifyPrivateCredentials") 权限。
public Subject(boolean readOnly,
Set<? extends Principal> principals,
Set<?> pubCredentials,
Set<?> privCredentials)
Subject 的实例。
指定将 Set 中的 Principal 和证书复制到新构建的 Set 中。在新创建的 Set 允许进行后续修改前检查此 Subject 是否已设置为只读的。新创建的 Set 还通过确保调用者具有足够权限的方式来防止非法修改。
要修改 Principal Set,调用者必须具有 AuthPermission("modifyPrincipals") 权限。要修改公开证书 Set,调用者必须具有 AuthPermission("modifyPublicCredentials") 权限。要修改私有证书 Set,调用者必须具有 AuthPermission("modifyPrivateCredentials") 权限。
readOnly - 如果 Subject 是只读的,则参数为 true,否则为 false。 principals - 要与此 Subject 关联的 Principal Set。 pubCredentials - 要与此 Subject 关联的公开证书 Set。 privCredentials - 要与此 Subject 关联的私有证书 Set。
NullPointerException - 如果指定的 principals、pubCredentials 或 privCredentials 为 null。| 方法详细信息 |
|---|
public void setReadOnly()
Subject 设置为只读的。
对此 Subject 的 Principal Set 和证书 Set 的修改(添加和移除)将是不允许的。仍然允许在此 Subject 的证书上进行 destroy 操作。
如果后续企图修改 Subject 的 Principal 和证书 Set,将导致抛出 IllegalStateException。另外,一旦 Subject 是只读的,就不可能再将它重新设置为可写的。
SecurityException - 如果调用者不具有将此 Subject 设置为只读的权限。public boolean isReadOnly()
Subject 是否为只读的。
Subject 为只读的,则返回 true;否则,返回 false。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。
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 运行的代码。
run 方法所返回的值。
NullPointerException - 如果 PrivilegedAction 为 null。
SecurityException - 如果调用者不具有调用此方法的权限。
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 运行的代码。
run 方法所返回的值。
PrivilegedActionException - 如果 PrivilegedExceptionAction.run 方法抛出经过检查的异常。
NullPointerException - 如果指定的 PrivilegedExceptionAction 为 null。
SecurityException - 如果调用者不具有调用此方法的权限。
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。
run 方法所返回的值。
NullPointerException - 如果 PrivilegedAction 为 null。
SecurityException - 如果调用者不具有调用此方法的权限。
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。
run 方法所返回的值。
PrivilegedActionException - 如果 PrivilegedExceptionAction.run 方法抛出经过检查的异常。
NullPointerException - 如果指定的 PrivilegedExceptionAction 为 null。
SecurityException - 如果调用者不具有调用此方法的权限。public Set<Principal> getPrincipals()
Subject 关联的 Principal Set。每个 Principal 表示此 Subject 的一个身份。
此 Subject 的内部 Principal Set 支持返回的 Set。对返回的 Set 的任何修改也影响内部的 Principal Set。
Subject 关联的 Principal Set。public <T extends Principal> Set<T> getPrincipals(Class<T> c)
Subject 关联的 Principal Set,它是指定的 Class 的实例或子类。
此 Subject 的内部 Principal Set 不支持返回的 Set。每次方法调用都创建和返回一个新的 Set。对返回的 Set 的修改不影响内部的 Principal Set。
c - 返回的 Principal Set 将都是此类的实例。
Class 的实例的 Principal Set。
NullPointerException - 如果指定的 Class 为 null。public Set<Object> getPublicCredentials()
Subject 中包含的公开证书 Set。
此 Subject 的内部公开证书 Set 支持返回的 Set。对返回的 Set 的任何修改也影响内部公开证书 Set。
Subject 中包含的公开证书 Set。public Set<Object> getPrivateCredentials()
Subject 中包含的私有证书 Set。
此 Subject 的内部私有证书 Set 支持返回的 Set。对返回的 Set 的任何修改也影响内部私有证书 Set。
调用者需要权限来访问返回的 Set 中的证书,或修改 Set 本身。如果调用者不具有正确的权限,则会抛出 SecurityException。
当迭代 Set 时,如果调用者不具有访问特定证书的权限,则抛出 SecurityException。Iterator 仍然是前移到 Set 中的下一个元素。
Subject 中包含的私有证书 Set。public <T> Set<T> getPublicCredentials(Class<T> c)
Subject 关联的公开证书 Set,它是指定的 Class 的实例或子类。
此 Subject 的内部公开证书 Set 不支持返回的 Set。每次方法调用都创建和返回一个新的 Set。对返回的 Set 的修改不影响内部公开证书 Set。
c - 返回的公开证书 Set 将都是此类的实例。
Class 的实例的公开证书 Set。
NullPointerException - 如果指定的 Class 为 null。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。public boolean equals(Object o)
Subject 的相等性。如果给定对象也是一个 Subject 并且两个 Subject 是等效的,则返回 true。更正式地说,如果两个 Subject 的 Principal 和 Credential Set 是相等的,则它们的实例就是相等的。
Object 中的 equalso - 要与此 Subject 进行相等性比较的对象。
Subject 相等,则返回 true。
SecurityException - 如果调用者不具有访问此 Subject 的私有证书的权限,或者如果调用者不具有访问所提供的 Subject 的私有证书的权限。Object.hashCode(),
Hashtablepublic String toString()
Subject 的字符串表示形式。
Object 中的 toStringSubject 的字符串表示形式。public int hashCode()
Subject 的哈希码。
Object 中的 hashCodeSubject 的哈希码。
SecurityException - 如果调用者不具有访问此 Subject 的私有证书的权限。Object.equals(java.lang.Object),
Hashtable
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。