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)