941 lines
46 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<div class="subTitle">
compact1, compact2, compact3
</div>
<div class="subTitle">
javax.security.auth
</div>
<h2 class="title" title="Class Subject">Class Subject</h2>
</div><div class="contentContainer">
<ul class="inheritance">
<li><a href="../../../java/lang/Object.html" title="class in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>javax.security.auth.Subject</li>
</ul> </li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>
All Implemented Interfaces:
</dt>
<dd>
<span><a href="../../../java/io/Serializable.html" title="java.io中的接口">Serializable</a></span>
</dd>
</dl>
<hr/> <br/> <pre>public final class <span class="typeNameLabel">Subject</span>
extends <a href="../../../java/lang/Object.html" title="class in java.lang">Object</a>
implements <a href="../../../java/io/Serializable.html" title="interface in java.io">Serializable</a></pre>
<div class="block">
<p> <span>A <code>Subject</code>表示单个实体(例如人)的相关信息的分组。</span> <span>此类信息包括主题的身份以及其与安全性相关的属性(例如密码和加密密钥)。</span> </p>
<p> <span>受试者可能具有多个身份。</span> <span>每个身份在<code>Principal</code>内表示为<code>Subject</code></span> <span>校长简单地将名称绑定到一个<code>Subject</code></span> <span>例如, <code>Subject</code>这恰好是一个人,爱丽丝,可能有两个主体:一个结合“爱丽丝吧”,她的驾驶执照的名称,到<code>Subject</code> 另有结合“999-99-9999” ,她的学生身份证号码,到了<code>Subject</code></span> <span>两个校长都参考同一个<code>Subject</code>即使每个都有不同的名称。</span> </p>
<p> <span>A <code>Subject</code>还可以拥有被称为凭证的与安全性有关的属性。</span> <span>需要特殊保护的敏感凭证(如私人加密密钥)存储在私人凭据<code>Set</code></span> <span>用于共享的凭据例如公开密钥证书或Kerberos服务器凭证将存储在公共证书<code>Set</code></span> <span>需要不同的权限来访问和修改不同的凭据集。</span> </p>
<p> <span>要检索与Subject相关联的所有<code>Subject</code> ,请调用<code>getPrincipals</code>方法。</span> <span>要检索所有属于公共或私有证书<code>Subject</code> ,调用<code>getPublicCredentials</code>方法或<code>getPrivateCredentials</code>方法,分别。</span> <span>修改返回<code>Set</code> Principal和证书请使用定义的方法<code>Set</code>类。</span> <span>例如:</span> </p>
<pre> <span>Subject subject;
Principal principal;
Object credential;
// add a Principal and credential to the Subject
subject.getPrincipals().add(principal);
subject.getPublicCredentials().add(credential);</span> </pre>
<p> <span>这个<code>Subject</code>类实现了<code>Serializable</code></span> <span>虽然与Subject相关联的<code>Subject</code>被序列化但是与Subject相关联的<code>Subject</code>不是。</span> <span>请注意, <code>java.security.Principal</code>类不实现<code>Serializable</code></span> <span>因此,与主题相关联的所有具体的<code>Principal</code>实现必须实现<code>Serializable</code></span> </p>
</div>
<dl>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../java/security/Principal.html" title="java.security中的接口"><code>Principal</code></a> <a href="../../../java/security/DomainCombiner.html" title="java.security中的接口"><code>DomainCombiner</code></a> <a href="../../../serialized-form.html#javax.security.auth.Subject">Serialized Form</a></span>
</dd>
</dl> </li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- --> </a> <h3>构造方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Constructor Summary table, listing constructors, and an explanation">
<caption>
<span>构造方法</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#Subject--">Subject</a></span>()</code>
<div class="block">
创建一个
<code>Subject</code>一个实例,其中包含一个空的
<code>Set</code>的主体和空的公共和私有凭据集。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#Subject-boolean-java.util.Set-java.util.Set-java.util.Set-">Subject</a></span>(boolean readOnly, <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;? extends <a href="../../../java/security/Principal.html" title="interface in java.security">Principal</a>&gt; principals, <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;?&gt; pubCredentials, <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;?&gt; privCredentials)</code>
<div class="block">
使用Principals和凭据创建一个
<code>Subject</code>的实例。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- --> </a> <h3>方法摘要</h3>
<table border="0" cellpadding="3" cellspacing="0" class="memberSummary" summary="Method Summary table, listing methods, and an explanation">
<caption>
<span class="activeTableTab" id="t0"><span>所有方法</span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t1"><span><a href="javascript:show(1);">静态方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t2"><span><a href="javascript:show(2);">接口方法</a></span><span class="tabEnd"> </span></span>
<span class="tableTab" id="t4"><span><a href="javascript:show(8);">具体的方法</a></span><span class="tabEnd"> </span></span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor" id="i0">
<td class="colFirst"><code>static &lt;T&gt; T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#doAs-javax.security.auth.Subject-java.security.PrivilegedAction-">doAs</a></span>(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject, <a href="../../../java/security/PrivilegedAction.html" title="interface in java.security">PrivilegedAction</a>&lt;T&gt; action)</code>
<div class="block">
执行工作,特别是
<code>Subject</code>
</div> </td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>static &lt;T&gt; T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#doAs-javax.security.auth.Subject-java.security.PrivilegedExceptionAction-">doAs</a></span>(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject, <a href="../../../java/security/PrivilegedExceptionAction.html" title="interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt; action)</code>
<div class="block">
执行工作,特别是
<code>Subject</code>
</div> </td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>static &lt;T&gt; T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#doAsPrivileged-javax.security.auth.Subject-java.security.PrivilegedAction-java.security.AccessControlContext-">doAsPrivileged</a></span>(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject, <a href="../../../java/security/PrivilegedAction.html" title="interface in java.security">PrivilegedAction</a>&lt;T&gt; action, <a href="../../../java/security/AccessControlContext.html" title="class in java.security">AccessControlContext</a> acc)</code>
<div class="block">
执行特权工作,特别是
<code>Subject</code>
</div> </td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>static &lt;T&gt; T</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#doAsPrivileged-javax.security.auth.Subject-java.security.PrivilegedExceptionAction-java.security.AccessControlContext-">doAsPrivileged</a></span>(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject, <a href="../../../java/security/PrivilegedExceptionAction.html" title="interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt; action, <a href="../../../java/security/AccessControlContext.html" title="class in java.security">AccessControlContext</a> acc)</code>
<div class="block">
执行特权工作,特别是
<code>Subject</code>
</div> </td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#equals-java.lang.Object-">equals</a></span>(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> o)</code>
<div class="block">
将指定的对象与此
<code>Subject</code>进行比较以获得相等性。
</div> </td>
</tr>
<tr class="rowColor" id="i5">
<td class="colFirst"><code><a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;<a href="../../../java/security/Principal.html" title="interface in java.security">Principal</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getPrincipals--">getPrincipals</a></span>()</code>
<div class="block">
返回与此
<code>Subject</code>相关
<code>Set</code>的校长的
<code>Subject</code>
</div> </td>
</tr>
<tr class="altColor" id="i6">
<td class="colFirst"><code>&lt;T extends <a href="../../../java/security/Principal.html" title="interface in java.security">Principal</a>&gt;<br/><a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getPrincipals-java.lang.Class-">getPrincipals</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; c)</code>
<div class="block">
返回
<code>Set</code>与此关联的Principal
<code>Subject</code>是实例或指定的子类
<code></code>
</div> </td>
</tr>
<tr class="rowColor" id="i7">
<td class="colFirst"><code><a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getPrivateCredentials--">getPrivateCredentials</a></span>()</code>
<div class="block">
返回此
<code>Set</code>的私人证书的
<code>Subject</code>
</div> </td>
</tr>
<tr class="altColor" id="i8">
<td class="colFirst"><code>&lt;T&gt; <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getPrivateCredentials-java.lang.Class-">getPrivateCredentials</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; c)</code>
<div class="block">
返回与此
<code>Subject</code>相关
<code>Set</code>的私有凭据的Set它们是指定的Class的实例或子
<code></code>
</div> </td>
</tr>
<tr class="rowColor" id="i9">
<td class="colFirst"><code><a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getPublicCredentials--">getPublicCredentials</a></span>()</code>
<div class="block">
返回这个
<code>Set</code>的公共证书的
<code>Subject</code>
</div> </td>
</tr>
<tr class="altColor" id="i10">
<td class="colFirst"><code>&lt;T&gt; <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getPublicCredentials-java.lang.Class-">getPublicCredentials</a></span>(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; c)</code>
<div class="block">
返回与此
<code>Subject</code>相关
<code>Set</code>的公共凭证的Set它们是指定的Class的实例或子
<code></code>
</div> </td>
</tr>
<tr class="rowColor" id="i11">
<td class="colFirst"><code>static <a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#getSubject-java.security.AccessControlContext-">getSubject</a></span>(<a href="../../../java/security/AccessControlContext.html" title="class in java.security">AccessControlContext</a> acc)</code>
<div class="block">
获取
<code>Subject</code>与所提供的相关
<code>AccessControlContext</code>
</div> </td>
</tr>
<tr class="altColor" id="i12">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#hashCode--">hashCode</a></span>()</code>
<div class="block">
返回此
<code>Subject</code>的哈希码。
</div> </td>
</tr>
<tr class="rowColor" id="i13">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#isReadOnly--">isReadOnly</a></span>()</code>
<div class="block">
查询此
<code>Subject</code>是否为只读。
</div> </td>
</tr>
<tr class="altColor" id="i14">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#setReadOnly--">setReadOnly</a></span>()</code>
<div class="block">
将此
<code>Subject</code>设置为只读。
</div> </td>
</tr>
<tr class="rowColor" id="i15">
<td class="colFirst"><code><a href="../../../java/lang/String.html" title="class in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../javax/security/auth/Subject.html#toString--">toString</a></span>()</code>
<div class="block">
返回此
<code>Subject</code>的String
<code>Subject</code>
</div> </td>
</tr>
</tbody>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- --> </a> <h3>Methods inherited from class java.lang.<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></h3> <code><a href="../../../java/lang/Object.html#clone--">clone</a>, <a href="../../../java/lang/Object.html#finalize--">finalize</a>, <a href="../../../java/lang/Object.html#getClass--">getClass</a>, <a href="../../../java/lang/Object.html#notify--">notify</a>, <a href="../../../java/lang/Object.html#notifyAll--">notifyAll</a>, <a href="../../../java/lang/Object.html#wait--">wait</a>, <a href="../../../java/lang/Object.html#wait-long-">wait</a>, <a href="../../../java/lang/Object.html#wait-long-int-">wait</a></code></li>
</ul> </li>
</ul> </li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- --> </a> <h3>构造方法详细信息</h3> <a name="Subject--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>Subject</h4> <pre>public Subject()</pre>
<div class="block">
<span>创建一个<code>Subject</code>一个实例,一个空的<code>Set</code>的主体和空的公共和私人凭据集。</span>
<p> <span>新建的集合检查此<code>Subject</code>是否已被设置为只读,然后才允许后续修改。</span> <span>新创建的集合还通过确保呼叫者具有足够的权限来防止非法修改。</span> </p>
<p> <span>要修改校长集,主叫方必须有<code>AuthPermission("modifyPrincipals")</code></span> <span>要修改公用证书集,呼叫者必须有<code>AuthPermission("modifyPublicCredentials")</code></span> <span>要修改私人凭据集,呼叫者必须有<code>AuthPermission("modifyPrivateCredentials")</code></span> </p>
</div> </li>
</ul> <a name="Subject-boolean-java.util.Set-java.util.Set-java.util.Set-">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>Subject</h4> <pre>public Subject(boolean readOnly,
<a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;? extends <a href="../../../java/security/Principal.html" title="interface in java.security">Principal</a>&gt; principals,
<a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;?&gt; pubCredentials,
<a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;?&gt; privCredentials)</pre>
<div class="block">
<span>使用主体和凭据创建一个<code>Subject</code>的实例。</span>
<p> <span>来自指定集的主体和凭据将复制到新构造的集合中。</span> <span>这些新创建的集合在允许后续修改之前检查此<code>Subject</code>是否已设置为只读。</span> <span>新创建的集合还通过确保呼叫者具有足够的权限来防止非法修改。</span> </p>
<p> <span>要修改Principals Set主叫方必须具有<code>AuthPermission("modifyPrincipals")</code></span> <span>要修改公用凭证集,呼叫者必须有<code>AuthPermission("modifyPublicCredentials")</code></span> <span>要修改私人凭证集,主叫方必须具有<code>AuthPermission("modifyPrivateCredentials")</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>readOnly</code> - 如果
<code>Subject</code>为只读则为true否则为false。
<p></p>
</dd>
<dd>
<code>principals</code> -在
<code>Set</code>校长与此相关
<code>Subject</code>
<p></p>
</dd>
<dd>
<code>pubCredentials</code> - 与此
<code>Subject</code>相关
<code>Set</code>的公共凭证的
<code>Subject</code>
<p></p>
</dd>
<dd>
<code>privCredentials</code> - 与此
<code>Subject</code>相关
<code>Set</code>的私人凭据的
<code>Subject</code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> -如果指定的
<code>principals</code>
<code>pubCredentials</code> ,或
<code>privCredentials</code>
<code>null</code>
</dd>
</dl> </li>
</ul> </li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- --> </a> <h3>方法详细信息</h3> <a name="setReadOnly--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>setReadOnly</h4> <pre>public void setReadOnly()</pre>
<div class="block">
<span>将此<code>Subject</code>设置为只读。</span>
<p> <span>此主题的修改(添加和删除) <code>Principal</code> <code>Set</code>和凭证集将被禁止。</span> <span><code>destroy</code>在这个问题上的凭据操作仍将被允许。</span> </p>
<p> <span>随后尝试修改主题的<code>Principal</code>和凭据集将导致<code>IllegalStateException</code>被抛出。</span> <span>另外,一旦<code>Subject</code>是只读,就不能重新设置为可写。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果来电者没有权限将此
<code>Subject</code>设置为只读。
</dd>
</dl> </li>
</ul> <a name="isReadOnly--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>isReadOnly</h4> <pre>public boolean isReadOnly()</pre>
<div class="block">
查询此
<code>Subject</code>是否为只读。
<p></p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
如果这个
<code>Subject</code>是只读的则为true否则为false。
</dd>
</dl> </li>
</ul> <a name="getSubject-java.security.AccessControlContext-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getSubject</h4> <pre>public static <a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> getSubject(<a href="../../../java/security/AccessControlContext.html" title="class in java.security">AccessControlContext</a> acc)</pre>
<div class="block">
<span>获取与提供的<code>Subject</code>相关联的<code>AccessControlContext</code></span>
<p> <span><code>AccessControlContext</code>可能包含许多主题(来自嵌套的<code>doAs</code>调用)。</span> <span>在这种情况下,最近<code>Subject</code>与相关<code>AccessControlContext</code>返回。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>acc</code> -
<code>AccessControlContext</code>从中检索
<code>Subject</code>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
所述
<code>Subject</code>与所提供的相关联的
<code>AccessControlContext</code> ,或
<code>null</code>如果没有
<code>Subject</code>与提供相关的
<code>AccessControlContext</code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果来电者没有获得Subject的
<code>Subject</code>
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果提供的
<code>AccessControlContext</code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="doAs-javax.security.auth.Subject-java.security.PrivilegedAction-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doAs</h4> <pre>public static &lt;T&gt; T doAs(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject,
<a href="../../../java/security/PrivilegedAction.html" title="interface in java.security">PrivilegedAction</a>&lt;T&gt; action)</pre>
<div class="block">
<span>执行工作,特别是<code>Subject</code></span>
<p> <span>该方法首先在当前线程的检索<code>AccessControlContext</code>经由<code>AccessController.getContext</code> ,然后实例化一个新<code>AccessControlContext</code>使用检索到的上下文与新的沿<code>SubjectDomainCombiner</code> (构建使用提供<code>Subject</code> )。</span> <span>最后,此方法调用<code>AccessController.doPrivileged</code> ,传递给它提供的<code>PrivilegedAction</code>以及新构建的<code>AccessControlContext</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 由PrivilegedAction的
<code>run</code>方法返回的值的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>subject</code> -在<code>Subject</code>指定的<code>action</code>会运行。</span>
<span>此参数可能为<code>null</code></span>
<p></p>
</dd>
<dd>
<code>action</code> - 要运行的代码为指定的
<code>Subject</code>
<p></p>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
PrivilegedAction的
<code>run</code>方法返回的值。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果
<code>PrivilegedAction</code>
<code>null</code>
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果调用者没有权限调用此方法。
</dd>
</dl> </li>
</ul> <a name="doAs-javax.security.auth.Subject-java.security.PrivilegedExceptionAction-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doAs</h4> <pre>public static &lt;T&gt; T doAs(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject,
<a href="../../../java/security/PrivilegedExceptionAction.html" title="interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt; action)
throws <a href="../../../java/security/PrivilegedActionException.html" title="class in java.security">PrivilegedActionException</a></pre>
<div class="block">
<span>执行工作,特别是<code>Subject</code></span>
<p> <span>该方法首先在当前线程的检索<code>AccessControlContext</code>经由<code>AccessController.getContext</code> ,然后实例化一个新<code>AccessControlContext</code>使用检索到的上下文与新的沿<code>SubjectDomainCombiner</code> (构建使用提供<code>Subject</code> )。</span> <span>最后,这个方法调用了<code>AccessController.doPrivileged</code> ,通过它提供了<code>PrivilegedExceptionAction</code> ,以及新构建的<code>AccessControlContext</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 由PrivilegedExceptionAction的
<code>run</code>方法返回的值的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>subject</code> - <code>Subject</code>指定的<code>action</code>将运行。</span>
<span>此参数可能为<code>null</code></span>
<p></p>
</dd>
<dd>
<code>action</code> - 要运行的代码为指定的
<code>Subject</code>
<p></p>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
由PrivilegedExceptionAction的
<code>run</code>方法返回的值。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/PrivilegedActionException.html" title="class in java.security">PrivilegedActionException</a></code> - 如果
<code>PrivilegedExceptionAction.run</code>方法抛出一个检查异常。
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果指定的
<code>PrivilegedExceptionAction</code>
<code>null</code>
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果调用者没有权限调用此方法。
</dd>
</dl> </li>
</ul> <a name="doAsPrivileged-javax.security.auth.Subject-java.security.PrivilegedAction-java.security.AccessControlContext-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doAsPrivileged</h4> <pre>public static &lt;T&gt; T doAsPrivileged(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject,
<a href="../../../java/security/PrivilegedAction.html" title="interface in java.security">PrivilegedAction</a>&lt;T&gt; action,
<a href="../../../java/security/AccessControlContext.html" title="class in java.security">AccessControlContext</a> acc)</pre>
<div class="block">
<span>作为一个特定的<code>Subject</code>执行特权工作。</span>
<p> <span>此方法的行为与<code>Subject.doAs</code> ,除了使用提供的<code>AccessControlContext</code> 而不是检索当前Thread的<code>AccessControlContext</code></span> <span>如果提供的<code>AccessControlContext</code><code>null</code> ,则此方法将实例化一个新的<code>AccessControlContext</code> 其中包含一个空集合的ProtectionDomains。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - PrivilegedAction的
<code>run</code>方法返回的值的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>subject</code> - <code>Subject</code>指定的<code>action</code>将作为运行。</span>
<span>该参数可以是<code>null</code></span>
<p></p>
</dd>
<dd>
<code>action</code> - 要运行的代码为指定的
<code>Subject</code>
<p></p>
</dd>
<dd>
<code>acc</code> -
<code>AccessControlContext</code>被绑定到指定的
<i>主题</i>
<i>动作</i>
<p></p>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
PrivilegedAction的
<code>run</code>方法返回的值。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果
<code>PrivilegedAction</code>
<code>null</code>
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果调用者没有权限调用此方法。
</dd>
</dl> </li>
</ul> <a name="doAsPrivileged-javax.security.auth.Subject-java.security.PrivilegedExceptionAction-java.security.AccessControlContext-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>doAsPrivileged</h4> <pre>public static &lt;T&gt; T doAsPrivileged(<a href="../../../javax/security/auth/Subject.html" title="class in javax.security.auth">Subject</a> subject,
<a href="../../../java/security/PrivilegedExceptionAction.html" title="interface in java.security">PrivilegedExceptionAction</a>&lt;T&gt; action,
<a href="../../../java/security/AccessControlContext.html" title="class in java.security">AccessControlContext</a> acc)
throws <a href="../../../java/security/PrivilegedActionException.html" title="class in java.security">PrivilegedActionException</a></pre>
<div class="block">
<span>执行特权工作,特别是<code>Subject</code></span>
<p> <span>此方法的行为与<code>Subject.doAs</code> ,不同之处在于它不使用当前的线程<code>AccessControlContext</code> ,而是使用提供的<code>AccessControlContext</code></span> <span>如果提供的<code>AccessControlContext</code><code>null</code> ,则此方法将实例化一个新的<code>AccessControlContext</code> 其中包含一个空集合的ProtectionDomains。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 由PrivilegedExceptionAction的
<code>run</code>方法返回的值的类型。
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<span><code>subject</code> -在<code>Subject</code>指定的<code>action</code>会运行。</span>
<span>此参数可能为<code>null</code></span>
<p></p>
</dd>
<dd>
<code>action</code> - 要运行的代码为指定的
<code>Subject</code>
<p></p>
</dd>
<dd>
<code>acc</code> -
<code>AccessControlContext</code>被绑定到指定的
<i>主题</i>
<i>动作</i>
<p></p>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
由PrivilegedExceptionAction的
<code>run</code>方法返回的值。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/security/PrivilegedActionException.html" title="class in java.security">PrivilegedActionException</a></code> - 如果
<code>PrivilegedExceptionAction.run</code>方法抛出一个被检查的异常。
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果指定的
<code>PrivilegedExceptionAction</code>
<code>null</code>
<p></p>
</dd>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果调用者没有权限调用此方法。
</dd>
</dl> </li>
</ul> <a name="getPrincipals--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPrincipals</h4> <pre>public <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;<a href="../../../java/security/Principal.html" title="interface in java.security">Principal</a>&gt; getPrincipals()</pre>
<div class="block">
<span>返回与此<code>Subject</code>相关<code>Set</code>的校长的<code>Subject</code></span>
<span>每个<code>Principal</code>代表这个<code>Subject</code>的身份。</span>
<p> <span>返回的<code>Set</code>由本主题的内部<code>Principal</code> <code>Set</code></span> <span>返回的<code>Set</code>任何修改<code>Set</code>影响内部<code>Principal</code> <code>Set</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
<code>Set</code>与此相关的校长
<code>Subject</code>
</dd>
</dl> </li>
</ul> <a name="getPrincipals-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPrincipals</h4> <pre>public &lt;T extends <a href="../../../java/security/Principal.html" title="interface in java.security">Principal</a>&gt; <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;T&gt; getPrincipals(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; c)</pre>
<div class="block">
<span>返回与此<code>Subject</code>相关<code>Set</code>的主题的Set它们是指定的Class的实例或子<code></code></span>
<p> <span>返回的<code>Set</code>不受此主题内部的<code>Principal</code> <code>Set</code></span> <span><code>Set</code>创建并返回每个方法调用。</span> <span>对返回的<code>Set</code>不会影响内部<code>Principal</code> <code>Set</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别由
<code>c</code>建模
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>c</code> - 返回的
<code>Set</code> Set将全部是这个类的实例。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Set</code>的主体是指定的Class的
<code></code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果指定的
<code></code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="getPublicCredentials--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPublicCredentials</h4> <pre>public <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a>&gt; getPublicCredentials()</pre>
<div class="block">
<span>返回此<code>Set</code>的公开证书的<code>Subject</code></span>
<p> <span>返回的<code>Set</code>由本主题的内部公开证书<code>Set</code></span> <span>返回的<code>Set</code>任何修改<code>Set</code>影响内部公众证书<code>Set</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
A
<code>Set</code>由本
<code>Subject</code>持有的公共
<code>Subject</code>
</dd>
</dl> </li>
</ul> <a name="getPrivateCredentials--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPrivateCredentials</h4> <pre>public <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a>&gt; getPrivateCredentials()</pre>
<div class="block">
<span>返回此<code>Set</code>私人凭证的<code>Subject</code></span>
<p> <span>返回的<code>Set</code>由本主题的内部私人凭证<code>Set</code></span> <span>返回的<code>Set</code>任何修改<code>Set</code>影响内部私人凭证<code>Set</code></span> </p>
<p> <span>呼叫者需要访问返回的Set中的<code>Set</code> ,或修改<code>Set</code>本身。</span> <span>一个<code>SecurityException</code>如果调用者没有适当的权限被抛出。</span> </p>
<p> <span>在遍历了<code>Set</code> ,一个<code>SecurityException</code>如果调用者没有权限访问特定凭证被抛出。</span> <span><code>Iterator</code>仍然被推进到下一个元素在<code>Set</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
A
<code>Set</code>由该
<code>Subject</code>持有的私人
<code>Subject</code>
</dd>
</dl> </li>
</ul> <a name="getPublicCredentials-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPublicCredentials</h4> <pre>public &lt;T&gt; <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;T&gt; getPublicCredentials(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; c)</pre>
<div class="block">
<span>返回与此<code>Subject</code>相关<code>Set</code>的公共凭证的Set它们是指定的Class的实例或子<code></code></span>
<p> <span>返回的<code>Set</code>不受此Subject的内部公开证书<code>Set</code></span> <span><code>Set</code>创建并返回每个方法调用。</span> <span>对返回的<code>Set</code>不会影响内部公众证书<code>Set</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别由
<code>c</code>建模
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>c</code> - 返回的
<code>Set</code>的公用凭证都将是此类的实例。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Set</code>的公共凭据是指定的Class的
<code></code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果指定的
<code></code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="getPrivateCredentials-java.lang.Class-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>getPrivateCredentials</h4> <pre>public &lt;T&gt; <a href="../../../java/util/Set.html" title="interface in java.util">Set</a>&lt;T&gt; getPrivateCredentials(<a href="../../../java/lang/Class.html" title="class in java.lang"></a>&lt;T&gt; c)</pre>
<div class="block">
<span>返回与此<code>Subject</code>相关<code>Set</code>的私有凭据的Set它们是指定的Class的实例或子<code></code></span>
<p> <span>来电者必须具有访问所有请求的凭证的权限,否则将抛出<code>SecurityException</code></span> </p>
<p> <span>返回的<code>Set</code>不受此Subject的内部私人凭证<code>Set</code></span> <span><code>Set</code>创建并返回每个方法调用。</span> <span>返回的<code>Set</code>不会影响内部私人凭据<code>Set</code></span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="paramLabel">参数类型</span>
</dt>
<dd>
<code>T</code> - 类别由
<code>c</code>建模
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>c</code> -返回
<code>Set</code>私有证书都将此类的实例。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
一个
<code>Set</code>的私有凭据是指定的Class的
<code></code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/NullPointerException.html" title="class in java.lang">NullPointerException</a></code> - 如果指定的
<code></code>
<code>null</code>
</dd>
</dl> </li>
</ul> <a name="equals-java.lang.Object-">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>equals</h4> <pre>public boolean equals(<a href="../../../java/lang/Object.html" title="class in java.lang">Object</a> o)</pre>
<div class="block">
<span>将指定的对象与此<code>Subject</code>进行比较以获得相等性。</span>
<span>如果给定对象也是主题,并且两个<code>Subject</code>实例是等效的则返回true。</span>
<span>更正式地,如果<code>Principal</code><code>Credential</code>组相等,则两个<code>Subject</code>实例是相等的。</span>
<p></p>
</div>
<dl>
<dt>
<span class="overrideSpecifyLabel">重写:</span>
</dt>
<dd>
<code><a href="../../../java/lang/Object.html#equals-java.lang.Object-">equals</a></code>在类
<code><a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></code>
</dd>
<dt>
<span class="paramLabel">参数</span>
</dt>
<dd>
<code>o</code> - 与此
<code>Subject</code>进行平等比较的对象。
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
如果指定的对象等于此
<code>Subject</code>
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果呼叫者没有权限访问此
<code>Subject</code>的私人凭据,或者主叫方没有权限访问提供的
<code>Subject</code>的私人
<code>Subject</code>
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<span><a href="../../../java/lang/Object.html#hashCode--"><code>Object.hashCode()</code></a> <a href="../../../java/util/HashMap.html" title="java.util中的类"><code>HashMap</code></a></span>
</dd>
</dl> </li>
</ul> <a name="toString--">
<!-- --> </a>
<ul class="blockList">
<li class="blockList"> <h4>toString</h4> <pre>public <a href="../../../java/lang/String.html" title="class in java.lang">String</a> toString()</pre>
<div class="block">
返回此
<code>Subject</code>的String
<code>Subject</code>
<p></p>
</div>
<dl>
<dt>
<span class="overrideSpecifyLabel">重写:</span>
</dt>
<dd>
<code><a href="../../../java/lang/Object.html#toString--">toString</a></code>在类别
<code><a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></code>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
这个
<code>Subject</code>的String
<code>Subject</code>
</dd>
</dl> </li>
</ul> <a name="hashCode--">
<!-- --> </a>
<ul class="blockListLast">
<li class="blockList"> <h4>hashCode</h4> <pre>public int hashCode()</pre>
<div class="block">
返回此
<code>Subject</code>的哈希码。
<p></p>
</div>
<dl>
<dt>
<span class="overrideSpecifyLabel">重写:</span>
</dt>
<dd>
<code><a href="../../../java/lang/Object.html#hashCode--">hashCode</a></code>在类别
<code><a href="../../../java/lang/Object.html" title="class in java.lang">Object</a></code>
</dd>
<dt>
<span class="returnLabel">结果</span>
</dt>
<dd>
这个
<code>Subject</code>的哈希码。
</dd>
<dt>
<span class="throwsLabel">异常</span>
</dt>
<dd>
<code><a href="../../../java/lang/SecurityException.html" title="class in java.lang">SecurityException</a></code> - 如果来电者没有权限访问此主题的私人凭据。
</dd>
<dt>
<span class="seeLabel">另请参见:</span>
</dt>
<dd>
<a href="../../../java/lang/Object.html#equals-java.lang.Object-"><code>Object.equals(java.lang.Object)</code></a>
<a href="../../../java/lang/System.html#identityHashCode-java.lang.Object-"><code>System.identityHashCode(java.lang.Object)</code></a>
</dd>
</dl> </li>
</ul> </li>
</ul> </li>
</ul>
</div>
</div>