public final class Subject extends Object implements Serializable
一个Subject
代表一个单一的实体的一组相关的信息,比如一个人。这些信息包括主体的身份,以及它的安全相关的属性(例如,密码和加密密钥)。
受试者可能有多重身份。一个身份是在Subject
一Principal
。校长干脆将名称绑定到一个Subject
。例如,一个Subject
恰好是一个人,爱丽丝,可能会有两个原则:一个结合“爱丽丝吧”,在她的驾驶证的名义,向Subject
,另一种是结合,“999-99-9999”,她的学生证号码,到Subject
。主要指的是同一个Subject
虽然各有不同的名称。
一个Subject
也可能自身安全相关的属性,这被称为凭据。敏感的凭据,需要特殊的保护,如私有密钥存储在一个私人凭证Set
。凭据的目的是共享的,如公钥证书或Kerberos服务器票存储在一个公共信任的Set
。不同的权限需要访问和修改不同的凭据集。
检索所有与Subject
相关原理,getPrincipals
方法调用。检索所有公共或私人凭据属于Subject
,调用getPublicCredentials
方法或getPrivateCredentials
方法,分别。修改返回Set
校长和凭据,在Set
类中定义的方法。例如:
主题主题;校长;对象的凭证;/添加一个主体和凭据的主题课题。getprincipals()加(主);课题。getpubliccredentials()添加(凭证);
这Subject
类实现Serializable
。而与Subject
相关的校长是序列化的,与Subject
相关凭据不。请注意,java.security.Principal
类不实现Serializable
。因此,所有的混凝土Principal
实现与主体必须实施Serializable
。
Principal
,
DomainCombiner
,
Serialized Form
Constructor and Description |
---|
Subject()
创建一个与校长和空套公共和私人凭据空
Set
Subject 实例。
|
Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
创建一个与校长和凭据
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 。
|
<T extends Principal> |
getPrincipals(类<T> c)
返回一个
Set 与此
Subject 是指定的
类 实例或类相关负责人。
|
Set<Object> |
getPrivateCredentials()
返回私有凭据这
Subject 举行
Set 。
|
<T> Set<T> |
getPrivateCredentials(类<T> c)
返回一个
Set 私有凭据这
Subject 是指定的
类 实例或类相关。
|
Set<Object> |
getPublicCredentials()
返回公共凭据这
Subject 举行
Set 。
|
<T> Set<T> |
getPublicCredentials(类<T> c)
返回一个
Set 与此
Subject 是指定的
类 实例或类相关的公共证书。
|
static Subject |
getSubject(AccessControlContext acc)
得到与所提供的
AccessControlContext 相关的
Subject 。
|
int |
hashCode()
返回该
Subject hashCode。
|
boolean |
isReadOnly()
这
Subject 查询是否是只读的。
|
void |
setReadOnly()
这
Subject 设置为只读。
|
String |
toString()
这
Subject 返回的字符串表示形式。
|
public Subject()
Set
Subject
实例。
新建成的集检查这是否Subject
已设置只读之前允许随后的修改。新创建的集还可以防止非法修改,以确保调用方有足够的权限。
修改原则,调用者必须AuthPermission("modifyPrincipals")
。修改公共信任的建立,调用者必须AuthPermission("modifyPublicCredentials")
。修改私人证件套,调用者必须AuthPermission("modifyPrivateCredentials")
。
public Subject(boolean readOnly, Set<? extends Principal> principals, Set<?> pubCredentials, Set<?> privCredentials)
Subject
实例。
从指定的集合中复制的主体和凭据复制到新构造的集合中。这些新创建的设置是否Subject
已设置只读之前允许随后的修改。新创建的集还可以防止非法修改,以确保调用方有足够的权限。
修改原则,调用者必须AuthPermission("modifyPrincipals")
。修改公共信任的建立,调用者必须AuthPermission("modifyPublicCredentials")
。修改私人证件套,调用者必须AuthPermission("modifyPrivateCredentials")
。
readOnly
-如果
Subject
是只读的,否则为假。
principals
——校长要与此相关的
Set
Subject
。
pubCredentials
-公共证书是与此相关的
Set
Subject
。
privCredentials
-私人凭据是与此相关的
Set
Subject
。
NullPointerException
-如果指定
principals
,
pubCredentials
,或
privCredentials
是
null
。
public void setReadOnly()
Subject
设置为只读。
修改(添加和删除)这一主题的Principal
Set
和证书将不被允许。对这一问题的凭据的destroy
操作仍将是被允许的。
随后试图修改对象的Principal
和证书将导致IllegalStateException
抛出。而且,一旦Subject
是只读的,不能复位,又可写。
SecurityException
如果调用者没有权限设置为只读
Subject
。
public boolean isReadOnly()
Subject
查询是否是只读的。
Subject
是只读的真,否则为假。
public static Subject getSubject(AccessControlContext acc)
AccessControlContext
相关的
Subject
。
的AccessControlContext
可能包含许多科目(从doAs
嵌套调用)。在这种情况下,与AccessControlContext
相关最新的Subject
返回。
acc
-从检索
Subject
的
AccessControlContext
。
Subject
与提供
AccessControlContext
,或
null
如果没有
Subject
与提供
AccessControlContext
相关。
SecurityException
如果调用者没有权限得到
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
-返回值的类型的方法的
run
PrivilegedAction。
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
,它使用所提供的AccessControlContext
。如果提供的AccessControlContext
是null
,此方法实例化一个新的AccessControlContext
与protectiondomains空集合。
T
-返回值的类型的方法的
run
PrivilegedAction。
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空集合。
run
方法返回的值的类型
T
。
subject
-
Subject
,指定
action
将运行。这个参数可以
null
。
action
的代码运行在指定的
Subject
。
acc
-
AccessControlContext
被连接到指定的主题和行动。
run
方法返回的值。
PrivilegedActionException
-如果
PrivilegedExceptionAction.run
方法抛出一个异常。
NullPointerException
-如果指定
PrivilegedExceptionAction
是
null
。
SecurityException
如果调用者没有权限调用该方法。
public Set<Principal> getPrincipals()
Subject
校长
Set
。每个
Principal
表示此
Subject
身份。
返回的Set
由这个主体的内部Principal
Set
支持。要返回的Set
影响内部Principal
Set
以及任何修改。
Set
Subject
校长。
public <T extends Principal> Set<T> getPrincipals(类<T> c)
Set
与此
Subject
是指定的
类
实例或类相关
返回的Set
不是由该主体的内部Principal
Set
支持。一个新的Set
创建并返回每个方法调用。要返回的Set
修改不会影响内部Principal
Set
。
T
-类的模拟
c
类型
c
-返回的
Set
校长都是这个类的实例。
Set
校长是指定的
类
实例。
NullPointerException
-如果指定
类
是
null
。
public Set<Object> getPublicCredentials()
Subject
举行
Set
。
返回的Set
由这个主体的内部公共信任的Set
支持。要返回的Set
影响内部公共信任的Set
以及任何修改。
Set
公共凭据这
Subject
举行。
public Set<Object> getPrivateCredentials()
Subject
举行
Set
。
返回的Set
由这个主体的内部私有凭据Set
支持。要返回的Set
影响内部私有凭据Set
以及任何修改。
来电者要求的权限访问在返回的Set
凭据,或修改Set
本身。一个SecurityException
如果调用方不具有适当的权限被。
当遍历Set
,一SecurityException
是如果对方没有权限访问特定凭证扔。的Iterator
仍然是先进的在Set
下元。
Set
私有凭据这
Subject
举行。
public <T> Set<T> getPublicCredentials(类<T> c)
Set
与此
Subject
是指定的
类
实例或类相关的公共证书。
返回的Set
不是由该主体的内部公共信任的Set
支持。一个新的Set
创建并返回每个方法调用。要返回的Set
修改不会影响到内部的公共信任的Set
。
T
-类的模拟
c
类型
c
-返回的
Set
公共证书都是这个类的实例。
Set
公共凭据,是指定的
类
实例。
NullPointerException
-如果指定
类
是
null
。
public <T> Set<T> getPrivateCredentials(类<T> c)
Set
私有凭据这
Subject
是指定的
类
实例或类相关联。
调用者必须有权限访问所有需要的凭据,或将引发SecurityException
。
返回的Set
不是由该主体的内部私有凭据Set
支持。一个新的Set
创建并返回每个方法调用。要返回的Set
修改不会影响内部私有凭据Set
。
T
-类的模拟
c
类型
c
-返回的
Set
私人证件都是这个类的实例。
Set
私有凭据,是指定的
类
实例。
NullPointerException
-如果指定
类
是
null
。
public boolean equals(Object o)
Subject
平等的比较。如果给定的对象也是一个主体和两
Subject
实例相等返回true。更正式地说,如果他们的
Principal
和
Credential
集是相等的两
Subject
实例相等。
equals
方法重写,继承类
Object
o
对象进行比较,这
Subject
平等。
Subject
。
SecurityException
-如果调用者没有权限访问这个
Subject
私有凭据,或如果调用者没有权限访问所提供的
Subject
私人凭据。
Object.hashCode()
,
HashMap
public String toString()
Subject
返回的字符串表示形式。
public int hashCode()
Subject
hashCode。
hashCode
方法重写,继承类
Object
Subject
hashCode。
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.