public final class Subject extends Object implements Serializable
A Subject表示单个实体(例如人)的相关信息的分组。 此类信息包括主题的身份以及其与安全性相关的属性(例如密码和加密密钥)。
受试者可能具有多个身份。 每个身份在Principal内表示为Subject 。 校长简单地将名称绑定到一个Subject 。 例如, Subject这恰好是一个人,爱丽丝,可能有两个主体:一个结合“爱丽丝吧”,她的驾驶执照的名称,到Subject ,另有结合,“999-99-9999” ,她的学生身份证号码,到了Subject 。 两个校长都参考同一个Subject即使每个都有不同的名称。
A Subject还可以拥有被称为凭证的与安全性有关的属性。 需要特殊保护的敏感凭证(如私人加密密钥)存储在私人凭据Set 。 用于共享的凭据,例如公开密钥证书或Kerberos服务器凭证将存储在公共证书Set 。 需要不同的权限来访问和修改不同的凭据集。
要检索与Subject相关联的所有Subject ,请调用getPrincipals方法。 要检索所有属于公共或私有证书Subject ,调用getPublicCredentials方法或getPrivateCredentials方法,分别。 修改返回Set Principal和证书,请使用定义的方法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被序列化,但是与Subject相关联的Subject不是。 请注意, java.security.Principal类不实现Serializable 。 因此,与主题相关联的所有具体的Principal实现必须实现Serializable 。
Principal , DomainCombiner , Serialized Form
| Constructor and Description |
|---|
Subject()
创建一个
Subject一个实例,其中包含一个空的
Set的主体和空的公共和私有凭据集。
|
Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
使用Principals和凭据创建一个
Subject的实例。
|
| Modifier and Type | Method and Description |
|---|---|
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相关
Set的校长的
Subject 。
|
<T extends Principal> |
getPrincipals(类<T> c)
返回
Set与此关联的Principal
Subject是实例或指定的子类
类 。
|
Set<Object> |
getPrivateCredentials()
返回此
Set的私人证书的
Subject 。
|
<T> Set<T> |
getPrivateCredentials(类<T> c)
返回与此
Subject相关
Set的私有凭据的Set,它们是指定的Class的实例或子
类 。
|
Set<Object> |
getPublicCredentials()
返回这个
Set的公共证书的
Subject 。
|
<T> Set<T> |
getPublicCredentials(类<T> c)
返回与此
Subject相关
Set的公共凭证的Set,它们是指定的Class的实例或子
类 。
|
static Subject |
getSubject(AccessControlContext acc)
获取
Subject与所提供的相关
AccessControlContext 。
|
int |
hashCode()
返回此
Subject的哈希码。
|
boolean |
isReadOnly()
查询此
Subject是否为只读。
|
void |
setReadOnly()
将此
Subject设置为只读。
|
String |
toString()
返回此
Subject的String
Subject 。
|
public Subject()
Subject一个实例,一个空的Set的主体和空的公共和私人凭据集。
新建的集合检查此Subject是否已被设置为只读,然后才允许后续修改。 新创建的集合还通过确保呼叫者具有足够的权限来防止非法修改。
要修改校长集,主叫方必须有AuthPermission("modifyPrincipals") 。 要修改公用证书集,呼叫者必须有AuthPermission("modifyPublicCredentials") 。 要修改私人凭据集,呼叫者必须有AuthPermission("modifyPrivateCredentials") 。
public Subject(boolean readOnly,
Set<? extends Principal> principals,
Set<?> pubCredentials,
Set<?> privCredentials)
Subject的实例。
来自指定集的主体和凭据将复制到新构造的集合中。 这些新创建的集合在允许后续修改之前检查此Subject是否已设置为只读。 新创建的集合还通过确保呼叫者具有足够的权限来防止非法修改。
要修改Principals Set,主叫方必须具有AuthPermission("modifyPrincipals") 。 要修改公用凭证集,呼叫者必须有AuthPermission("modifyPublicCredentials") 。 要修改私人凭证集,主叫方必须具有AuthPermission("modifyPrivateCredentials") 。
readOnly - 如果
Subject为只读,则为true,否则为false。
principals -在
Set校长与此相关
Subject 。
pubCredentials - 与此
Subject相关
Set的公共凭证的
Subject 。
privCredentials - 与此
Subject相关
Set的私人凭据的
Subject 。
NullPointerException -如果指定的
principals ,
pubCredentials ,或
privCredentials是
null 。
public void setReadOnly()
Subject设置为只读。
此主题的修改(添加和删除) Principal Set和凭证集将被禁止。 该destroy在这个问题上的凭据操作仍将被允许。
随后尝试修改主题的Principal和凭据集将导致IllegalStateException被抛出。 另外,一旦Subject是只读,就不能重新设置为可写。
SecurityException - 如果来电者没有权限将此
Subject设置为只读。
public boolean isReadOnly()
Subject是否为只读。
Subject是只读的,则为true,否则为false。
public static Subject getSubject(AccessControlContext acc)
Subject相关联的AccessControlContext 。
AccessControlContext可能包含许多主题(来自嵌套的doAs调用)。 在这种情况下,最近Subject与相关AccessControlContext返回。
acc -
AccessControlContext从中检索
Subject 。
Subject与所提供的相关联的
AccessControlContext ,或
null如果没有
Subject与提供相关的
AccessControlContext 。
SecurityException - 如果来电者没有获得Subject的
Subject 。
NullPointerException - 如果提供的
AccessControlContext是
null 。
public static <T> T doAs(Subject subject, PrivilegedAction<T> action)
Subject 。
该方法首先在当前线程的检索AccessControlContext经由AccessController.getContext ,然后实例化一个新AccessControlContext使用检索到的上下文与新的沿SubjectDomainCombiner (构建使用提供Subject )。 最后,此方法调用AccessController.doPrivileged ,传递给它提供的PrivilegedAction以及新构建的AccessControlContext 。
T - 由PrivilegedAction的
run方法返回的值的类型。
subject -在Subject指定的action会运行。
此参数可能为null 。
action - 要运行的代码为指定的
Subject 。
run方法返回的值。
NullPointerException - 如果
PrivilegedAction是
null 。
SecurityException - 如果调用者没有权限调用此方法。
public static <T> T doAs(Subject subject, PrivilegedExceptionAction<T> action) throws PrivilegedActionException
Subject 。
该方法首先在当前线程的检索AccessControlContext经由AccessController.getContext ,然后实例化一个新AccessControlContext使用检索到的上下文与新的沿SubjectDomainCombiner (构建使用提供Subject )。 最后,这个方法调用了AccessController.doPrivileged ,通过它提供了PrivilegedExceptionAction ,以及新构建的AccessControlContext 。
T - 由PrivilegedExceptionAction的
run方法返回的值的类型。
subject - Subject指定的action将运行。
此参数可能为null 。
action - 要运行的代码为指定的
Subject 。
run方法返回的值。
PrivilegedActionException - 如果
PrivilegedExceptionAction.run方法抛出一个检查异常。
NullPointerException - 如果指定的
PrivilegedExceptionAction是
null 。
SecurityException - 如果调用者没有权限调用此方法。
public static <T> T doAsPrivileged(Subject subject, PrivilegedAction<T> action, AccessControlContext acc)
Subject执行特权工作。
此方法的行为与Subject.doAs ,除了使用提供的AccessControlContext ,而不是检索当前Thread的AccessControlContext 。 如果提供的AccessControlContext是null ,则此方法将实例化一个新的AccessControlContext ,其中包含一个空集合的ProtectionDomains。
T - PrivilegedAction的
run方法返回的值的类型。
subject - Subject指定的action将作为运行。
该参数可以是null 。
action - 要运行的代码为指定的
Subject 。
acc -
AccessControlContext被绑定到指定的
主题和
动作 。
run方法返回的值。
NullPointerException - 如果
PrivilegedAction是
null 。
SecurityException - 如果调用者没有权限调用此方法。
public static <T> T doAsPrivileged(Subject subject, PrivilegedExceptionAction<T> action, AccessControlContext acc) throws PrivilegedActionException
Subject 。
此方法的行为与Subject.doAs ,不同之处在于它不使用当前的线程AccessControlContext ,而是使用提供的AccessControlContext 。 如果提供的AccessControlContext是null ,则此方法将实例化一个新的AccessControlContext ,其中包含一个空集合的ProtectionDomains。
T - 由PrivilegedExceptionAction的
run方法返回的值的类型。
subject -在Subject指定的action会运行。
此参数可能为null 。
action - 要运行的代码为指定的
Subject 。
acc -
AccessControlContext被绑定到指定的
主题和
动作 。
run方法返回的值。
PrivilegedActionException - 如果
PrivilegedExceptionAction.run方法抛出一个被检查的异常。
NullPointerException - 如果指定的
PrivilegedExceptionAction是
null 。
SecurityException - 如果调用者没有权限调用此方法。
public Set<Principal> getPrincipals()
Subject相关Set的校长的Subject 。
每个Principal代表这个Subject的身份。
返回的Set由本主题的内部Principal Set 。 返回的Set任何修改Set影响内部Principal Set 。
Set与此相关的校长
Subject 。
public <T extends Principal> Set<T> getPrincipals(类<T> c)
Subject相关Set的主题的Set,它们是指定的Class的实例或子类 。
返回的Set不受此主题内部的Principal Set 。 新Set创建并返回每个方法调用。 对返回的Set不会影响内部Principal Set 。
T - 类别由
c建模
c - 返回的
Set Set将全部是这个类的实例。
Set的主体是指定的Class的
类 。
NullPointerException - 如果指定的
类是
null 。
public Set<Object> getPublicCredentials()
Set的公开证书的Subject 。
返回的Set由本主题的内部公开证书Set 。 返回的Set任何修改Set影响内部公众证书Set 。
Set由本
Subject持有的公共
Subject 。
public Set<Object> getPrivateCredentials()
Set私人凭证的Subject 。
返回的Set由本主题的内部私人凭证Set 。 返回的Set任何修改Set影响内部私人凭证Set 。
呼叫者需要访问返回的Set中的Set ,或修改Set本身。 一个SecurityException如果调用者没有适当的权限被抛出。
在遍历了Set ,一个SecurityException如果调用者没有权限访问特定凭证被抛出。 该Iterator仍然被推进到下一个元素在Set 。
Set由该
Subject持有的私人
Subject 。
public <T> Set<T> getPublicCredentials(类<T> c)
Subject相关Set的公共凭证的Set,它们是指定的Class的实例或子类 。
返回的Set不受此Subject的内部公开证书Set 。 新Set创建并返回每个方法调用。 对返回的Set不会影响内部公众证书Set 。
T - 类别由
c建模
c - 返回的
Set的公用凭证都将是此类的实例。
Set的公共凭据是指定的Class的
类 。
NullPointerException - 如果指定的
类是
null 。
public <T> Set<T> getPrivateCredentials(类<T> c)
Subject相关Set的私有凭据的Set,它们是指定的Class的实例或子类 。
来电者必须具有访问所有请求的凭证的权限,否则将抛出SecurityException 。
返回的Set不受此Subject的内部私人凭证Set 。 新Set创建并返回每个方法调用。 返回的Set不会影响内部私人凭据Set 。
T - 类别由
c建模
c -返回
Set私有证书都将此类的实例。
Set的私有凭据是指定的Class的
类 。
NullPointerException - 如果指定的
类是
null 。
public boolean equals(Object o)
Subject进行比较以获得相等性。
如果给定对象也是主题,并且两个Subject实例是等效的,则返回true。
更正式地,如果Principal和Credential组相等,则两个Subject实例是相等的。
equals在类
Object
o - 与此
Subject进行平等比较的对象。
Subject 。
SecurityException - 如果呼叫者没有权限访问此
Subject的私人凭据,或者主叫方没有权限访问提供的
Subject的私人
Subject 。
Object.hashCode() , HashMap
public String toString()
Subject的String
Subject 。
public int hashCode()
Subject的哈希码。
hashCode在类别
Object
Subject的哈希码。
SecurityException - 如果来电者没有权限访问此主题的私人凭据。
Object.equals(java.lang.Object) ,
System.identityHashCode(java.lang.Object)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.