所有类


javax.security.auth
类 Subject

java.lang.Object
  继承者 javax.security.auth.Subject
所有已实现的接口:
Serializable

public final class Subject
   
   
   
   
   
extends Object
implements Serializable

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 Object doAs(Subject subject, PrivilegedAction action)
          作为特定的 Subject 的功能。
static Object doAs(Subject subject, PrivilegedExceptionAction action)
          作为特定的 Subject 的功能。
static Object doAsPrivileged(Subject subject, PrivilegedAction action, AccessControlContext acc)
          作为特定的 Subject 的特权功能。
static Object doAsPrivileged(Subject subject, PrivilegedExceptionAction action, AccessControlContext acc)
          作为特定的 Subject 的特权功能。
 boolean equals(Object o)
          比较指定对象与此 Subject 的相等性。
 Set<Principal> getPrincipals()
          返回与此 Subject 关联的 Principal Set
<T extends Principal>
Set<T>
getPrincipals(Class<T> c)
          返回与此 Subject关联的 Principal Set,它是指定的 Class 的实例或子类。
 Set<Object> getPrivateCredentials()
          返回此 Subject 中包含的私有证书 Set
<T> Set<T>
getPrivateCredentials(Class<T> c)
          返回与此 Subject关联的私有证书 Set,它是指定的 Class 的实例或子类。
 Set<Object> getPublicCredentials()
          返回此 Subject 中包含的公开证书 Set
<T> Set<T>
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 关联的 Principal Set

pubCredentials - 要与此 Subject 关联的公开证书 Set

privCredentials - 要与此 Subject 关联的私有证书 Set
抛出:
NullPointerException - 如果指定的 principalspubCredentialsprivCredentialsnull
方法详细信息

setReadOnly

public void setReadOnly()
将此 Subject 设置为只读的。

对此 Subject 的 Principal Set 和证书 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 - 如果提供的 AccessControlContextnull

doAs

public static Object doAs(Subject subject,
                          PrivilegedAction action)
作为特定的 Subject 的功能。

此方法首先通过 AccessController.getContext 检索当前 Thread 的 AccessControlContext,接着使用检索到的上下文与新的 SubjectDomainCombiner (使用提供的 Subject 构建)实例化一个 AccessControlContext。最后,此方法调用 AccessController.doPrivileged,将提供的 PrivilegedAction 以及新构建的 AccessControlContext 传递到 AccessController.doPrivileged

参数:
subject - 指定的 action 将作为该 Subject 运行。此参数可以为 null

action - 将作为指定的 Subject 运行的代码。

返回:
PrivilegedAction 的 run 方法所返回的 Object
抛出:
NullPointerException - 如果 PrivilegedActionnull

SecurityException - 如果调用方不具有调用此方法的权限。

doAs

public static Object doAs(Subject subject,
                          PrivilegedExceptionAction 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 方法所返回的 Object
抛出:
PrivilegedActionException - 如果 PrivilegedExceptionAction.run 方法抛出经过检查的异常。

NullPointerException - 如果指定的 PrivilegedExceptionActionnull

SecurityException - 如果调用方不具有调用此方法的权限。

doAsPrivileged

public static Object doAsPrivileged(Subject subject,
                                    PrivilegedAction action,
                                    AccessControlContext acc)
作为特定的 Subject 的特权功能。

除了使用提供的 AccessControlContext,而不是获取当前 Thread 的 AccessControlContext 外,此方法的行为与 Subject.doAs 完全一样。如果提供的 AccessControlContextnull,则此方法实例化一个新的带有空 ProtectionDomains 集合的 AccessControlContext

参数:
subject - 指定的 action 将作为该 Subject 运行。此参数可以为 null

action - 将作为指定的 Subject 运行的代码。

acc - 限制为指定 subjectactionAccessControlContext

返回:
PrivilegedAction 的 run 方法所返回的 Object
抛出:
NullPointerException - 如果 PrivilegedActionnull

SecurityException - 如果调用方不具有调用此方法的权限。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部