<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="fr">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.shiro.subject;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.shiro.SecurityUtils;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.shiro.authc.AuthenticationException;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.shiro.authc.AuthenticationToken;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.shiro.authz.AuthorizationException;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.shiro.authz.Permission;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.shiro.mgt.SecurityManager;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.shiro.mgt.SubjectFactory;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.shiro.session.Session;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.shiro.subject.support.DefaultSubjectContext;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.shiro.util.StringUtils;<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.io.Serializable;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Collection;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.List;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.concurrent.Callable;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
<span class="sourceLineNo">038</span> * A {@code Subject} represents state and security operations for a &lt;em&gt;single&lt;/em&gt; application user.<a name="line.38"></a>
<span class="sourceLineNo">039</span> * These operations include authentication (login/logout), authorization (access control), and<a name="line.39"></a>
<span class="sourceLineNo">040</span> * session access. It is Shiro's primary mechanism for single-user security functionality.<a name="line.40"></a>
<span class="sourceLineNo">041</span> * &lt;h3&gt;Acquiring a Subject&lt;/h3&gt;<a name="line.41"></a>
<span class="sourceLineNo">042</span> * To acquire the currently-executing {@code Subject}, application developers will almost always use<a name="line.42"></a>
<span class="sourceLineNo">043</span> * {@code SecurityUtils}:<a name="line.43"></a>
<span class="sourceLineNo">044</span> * &lt;pre&gt;<a name="line.44"></a>
<span class="sourceLineNo">045</span> * {@link SecurityUtils SecurityUtils}.{@link org.apache.shiro.SecurityUtils#getSubject() getSubject()}&lt;/pre&gt;<a name="line.45"></a>
<span class="sourceLineNo">046</span> * Almost all security operations should be performed with the {@code Subject} returned from this method.<a name="line.46"></a>
<span class="sourceLineNo">047</span> * &lt;h3&gt;Permission methods&lt;/h3&gt;<a name="line.47"></a>
<span class="sourceLineNo">048</span> * Note that there are many *Permission methods in this interface overloaded to accept String arguments instead of<a name="line.48"></a>
<span class="sourceLineNo">049</span> * {@link Permission Permission} instances. They are a convenience allowing the caller to use a String representation of<a name="line.49"></a>
<span class="sourceLineNo">050</span> * a {@link Permission Permission} if desired.  The underlying Authorization subsystem implementations will usually<a name="line.50"></a>
<span class="sourceLineNo">051</span> * simply convert these String values to {@link Permission Permission} instances and then just call the corresponding<a name="line.51"></a>
<span class="sourceLineNo">052</span> * type-safe method.  (Shiro's default implementations do String-to-Permission conversion for these methods using<a name="line.52"></a>
<span class="sourceLineNo">053</span> * {@link org.apache.shiro.authz.permission.PermissionResolver PermissionResolver}s.)<a name="line.53"></a>
<span class="sourceLineNo">054</span> * &lt;p/&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span> * These overloaded *Permission methods forgo type-safety for the benefit of convenience and simplicity,<a name="line.55"></a>
<span class="sourceLineNo">056</span> * so you should choose which ones to use based on your preferences and needs.<a name="line.56"></a>
<span class="sourceLineNo">057</span> *<a name="line.57"></a>
<span class="sourceLineNo">058</span> * @since 0.1<a name="line.58"></a>
<span class="sourceLineNo">059</span> */<a name="line.59"></a>
<span class="sourceLineNo">060</span>public interface Subject {<a name="line.60"></a>
<span class="sourceLineNo">061</span><a name="line.61"></a>
<span class="sourceLineNo">062</span>    /**<a name="line.62"></a>
<span class="sourceLineNo">063</span>     * Returns this Subject's application-wide uniquely identifying principal, or {@code null} if this<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * Subject is anonymous because it doesn't yet have any associated account data (for example,<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * if they haven't logged in).<a name="line.65"></a>
<span class="sourceLineNo">066</span>     * &lt;p/&gt;<a name="line.66"></a>
<span class="sourceLineNo">067</span>     * The term &lt;em&gt;principal&lt;/em&gt; is just a fancy security term for any identifying attribute(s) of an application<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * user, such as a username, or user id, or public key, or anything else you might use in your application to<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * identify a user.<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * &lt;h4&gt;Uniqueness&lt;/h4&gt;<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * Although given names and family names (first/last) are technically considered principals as well,<a name="line.71"></a>
<span class="sourceLineNo">072</span>     * Shiro expects the object returned from this method to be an identifying attribute unique across<a name="line.72"></a>
<span class="sourceLineNo">073</span>     * your entire application.<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * &lt;p/&gt;<a name="line.74"></a>
<span class="sourceLineNo">075</span>     * This implies that things like given names and family names are usually poor<a name="line.75"></a>
<span class="sourceLineNo">076</span>     * candidates as return values since they are rarely guaranteed to be unique;  Things often used for this value:<a name="line.76"></a>
<span class="sourceLineNo">077</span>     * &lt;ul&gt;<a name="line.77"></a>
<span class="sourceLineNo">078</span>     * &lt;li&gt;A {@code long} RDBMS surrogate primary key&lt;/li&gt;<a name="line.78"></a>
<span class="sourceLineNo">079</span>     * &lt;li&gt;An application-unique username&lt;/li&gt;<a name="line.79"></a>
<span class="sourceLineNo">080</span>     * &lt;li&gt;A {@link java.util.UUID UUID}&lt;/li&gt;<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * &lt;li&gt;An LDAP Unique ID&lt;/li&gt;<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * &lt;/ul&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span>     * or any other similar suitable unique mechanism valuable to your application.<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * &lt;p/&gt;<a name="line.84"></a>
<span class="sourceLineNo">085</span>     * Most implementations will simply return<a name="line.85"></a>
<span class="sourceLineNo">086</span>     * &lt;code&gt;{@link #getPrincipals()}.{@link org.apache.shiro.subject.PrincipalCollection#getPrimaryPrincipal() getPrimaryPrincipal()}&lt;/code&gt;<a name="line.86"></a>
<span class="sourceLineNo">087</span>     *<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * @return this Subject's application-specific unique identity.<a name="line.88"></a>
<span class="sourceLineNo">089</span>     * @see org.apache.shiro.subject.PrincipalCollection#getPrimaryPrincipal()<a name="line.89"></a>
<span class="sourceLineNo">090</span>     */<a name="line.90"></a>
<span class="sourceLineNo">091</span>    Object getPrincipal();<a name="line.91"></a>
<span class="sourceLineNo">092</span><a name="line.92"></a>
<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * Returns this Subject's principals (identifying attributes) in the form of a {@code PrincipalCollection} or<a name="line.94"></a>
<span class="sourceLineNo">095</span>     * {@code null} if this Subject is anonymous because it doesn't yet have any associated account data (for example,<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * if they haven't logged in).<a name="line.96"></a>
<span class="sourceLineNo">097</span>     * &lt;p/&gt;<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * The word &amp;quot;principals&amp;quot; is nothing more than a fancy security term for identifying attributes associated<a name="line.98"></a>
<span class="sourceLineNo">099</span>     * with a Subject, aka, application user.  For example, user id, a surname (family/last name), given (first) name,<a name="line.99"></a>
<span class="sourceLineNo">100</span>     * social security number, nickname, username, etc, are all examples of a principal.<a name="line.100"></a>
<span class="sourceLineNo">101</span>     *<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * @return all of this Subject's principals (identifying attributes).<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * @see #getPrincipal()<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * @see org.apache.shiro.subject.PrincipalCollection#getPrimaryPrincipal()<a name="line.104"></a>
<span class="sourceLineNo">105</span>     */<a name="line.105"></a>
<span class="sourceLineNo">106</span>    PrincipalCollection getPrincipals();<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>    /**<a name="line.108"></a>
<span class="sourceLineNo">109</span>     * Returns {@code true} if this Subject is permitted to perform an action or access a resource summarized by the<a name="line.109"></a>
<span class="sourceLineNo">110</span>     * specified permission string.<a name="line.110"></a>
<span class="sourceLineNo">111</span>     * &lt;p/&gt;<a name="line.111"></a>
<span class="sourceLineNo">112</span>     * This is an overloaded method for the corresponding type-safe {@link Permission Permission} variant.<a name="line.112"></a>
<span class="sourceLineNo">113</span>     * Please see the class-level JavaDoc for more information on these String-based permission methods.<a name="line.113"></a>
<span class="sourceLineNo">114</span>     *<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * @param permission the String representation of a Permission that is being checked.<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * @return true if this Subject is permitted, false otherwise.<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * @see #isPermitted(Permission permission)<a name="line.117"></a>
<span class="sourceLineNo">118</span>     * @since 0.9<a name="line.118"></a>
<span class="sourceLineNo">119</span>     */<a name="line.119"></a>
<span class="sourceLineNo">120</span>    boolean isPermitted(String permission);<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span>    /**<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * Returns {@code true} if this Subject is permitted to perform an action or access a resource summarized by the<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * specified permission.<a name="line.124"></a>
<span class="sourceLineNo">125</span>     * &lt;p/&gt;<a name="line.125"></a>
<span class="sourceLineNo">126</span>     * More specifically, this method determines if any {@code Permission}s associated<a name="line.126"></a>
<span class="sourceLineNo">127</span>     * with the subject {@link Permission#implies(Permission) imply} the specified permission.<a name="line.127"></a>
<span class="sourceLineNo">128</span>     *<a name="line.128"></a>
<span class="sourceLineNo">129</span>     * @param permission the permission that is being checked.<a name="line.129"></a>
<span class="sourceLineNo">130</span>     * @return true if this Subject is permitted, false otherwise.<a name="line.130"></a>
<span class="sourceLineNo">131</span>     */<a name="line.131"></a>
<span class="sourceLineNo">132</span>    boolean isPermitted(Permission permission);<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>    /**<a name="line.134"></a>
<span class="sourceLineNo">135</span>     * Checks if this Subject implies the given permission strings and returns a boolean array indicating which<a name="line.135"></a>
<span class="sourceLineNo">136</span>     * permissions are implied.<a name="line.136"></a>
<span class="sourceLineNo">137</span>     * &lt;p/&gt;<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * This is an overloaded method for the corresponding type-safe {@link Permission Permission} variant.<a name="line.138"></a>
<span class="sourceLineNo">139</span>     * Please see the class-level JavaDoc for more information on these String-based permission methods.<a name="line.139"></a>
<span class="sourceLineNo">140</span>     *<a name="line.140"></a>
<span class="sourceLineNo">141</span>     * @param permissions the String representations of the Permissions that are being checked.<a name="line.141"></a>
<span class="sourceLineNo">142</span>     * @return a boolean array where indices correspond to the index of the<a name="line.142"></a>
<span class="sourceLineNo">143</span>     *         permissions in the given list.  A true value at an index indicates this Subject is permitted for<a name="line.143"></a>
<span class="sourceLineNo">144</span>     *         for the associated {@code Permission} string in the list.  A false value at an index<a name="line.144"></a>
<span class="sourceLineNo">145</span>     *         indicates otherwise.<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * @since 0.9<a name="line.146"></a>
<span class="sourceLineNo">147</span>     */<a name="line.147"></a>
<span class="sourceLineNo">148</span>    boolean[] isPermitted(String... permissions);<a name="line.148"></a>
<span class="sourceLineNo">149</span><a name="line.149"></a>
<span class="sourceLineNo">150</span>    /**<a name="line.150"></a>
<span class="sourceLineNo">151</span>     * Checks if this Subject implies the given Permissions and returns a boolean array indicating which permissions<a name="line.151"></a>
<span class="sourceLineNo">152</span>     * are implied.<a name="line.152"></a>
<span class="sourceLineNo">153</span>     * &lt;p/&gt;<a name="line.153"></a>
<span class="sourceLineNo">154</span>     * More specifically, this method should determine if each {@code Permission} in<a name="line.154"></a>
<span class="sourceLineNo">155</span>     * the array is {@link Permission#implies(Permission) implied} by permissions<a name="line.155"></a>
<span class="sourceLineNo">156</span>     * already associated with the subject.<a name="line.156"></a>
<span class="sourceLineNo">157</span>     * &lt;p/&gt;<a name="line.157"></a>
<span class="sourceLineNo">158</span>     * This is primarily a performance-enhancing method to help reduce the number of<a name="line.158"></a>
<span class="sourceLineNo">159</span>     * {@link #isPermitted} invocations over the wire in client/server systems.<a name="line.159"></a>
<span class="sourceLineNo">160</span>     *<a name="line.160"></a>
<span class="sourceLineNo">161</span>     * @param permissions the permissions that are being checked.<a name="line.161"></a>
<span class="sourceLineNo">162</span>     * @return a boolean array where indices correspond to the index of the<a name="line.162"></a>
<span class="sourceLineNo">163</span>     *         permissions in the given list.  A true value at an index indicates this Subject is permitted for<a name="line.163"></a>
<span class="sourceLineNo">164</span>     *         for the associated {@code Permission} object in the list.  A false value at an index<a name="line.164"></a>
<span class="sourceLineNo">165</span>     *         indicates otherwise.<a name="line.165"></a>
<span class="sourceLineNo">166</span>     */<a name="line.166"></a>
<span class="sourceLineNo">167</span>    boolean[] isPermitted(List&lt;Permission&gt; permissions);<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span>    /**<a name="line.169"></a>
<span class="sourceLineNo">170</span>     * Returns {@code true} if this Subject implies all of the specified permission strings, {@code false} otherwise.<a name="line.170"></a>
<span class="sourceLineNo">171</span>     * &lt;p/&gt;<a name="line.171"></a>
<span class="sourceLineNo">172</span>     * This is an overloaded method for the corresponding type-safe {@link org.apache.shiro.authz.Permission Permission}<a name="line.172"></a>
<span class="sourceLineNo">173</span>     * variant.  Please see the class-level JavaDoc for more information on these String-based permission methods.<a name="line.173"></a>
<span class="sourceLineNo">174</span>     *<a name="line.174"></a>
<span class="sourceLineNo">175</span>     * @param permissions the String representations of the Permissions that are being checked.<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * @return true if this Subject has all of the specified permissions, false otherwise.<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * @see #isPermittedAll(Collection)<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * @since 0.9<a name="line.178"></a>
<span class="sourceLineNo">179</span>     */<a name="line.179"></a>
<span class="sourceLineNo">180</span>    boolean isPermittedAll(String... permissions);<a name="line.180"></a>
<span class="sourceLineNo">181</span><a name="line.181"></a>
<span class="sourceLineNo">182</span>    /**<a name="line.182"></a>
<span class="sourceLineNo">183</span>     * Returns {@code true} if this Subject implies all of the specified permissions, {@code false} otherwise.<a name="line.183"></a>
<span class="sourceLineNo">184</span>     * &lt;p/&gt;<a name="line.184"></a>
<span class="sourceLineNo">185</span>     * More specifically, this method determines if all of the given {@code Permission}s are<a name="line.185"></a>
<span class="sourceLineNo">186</span>     * {@link Permission#implies(Permission) implied by} permissions already associated with this Subject.<a name="line.186"></a>
<span class="sourceLineNo">187</span>     *<a name="line.187"></a>
<span class="sourceLineNo">188</span>     * @param permissions the permissions to check.<a name="line.188"></a>
<span class="sourceLineNo">189</span>     * @return true if this Subject has all of the specified permissions, false otherwise.<a name="line.189"></a>
<span class="sourceLineNo">190</span>     */<a name="line.190"></a>
<span class="sourceLineNo">191</span>    boolean isPermittedAll(Collection&lt;Permission&gt; permissions);<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>    /**<a name="line.193"></a>
<span class="sourceLineNo">194</span>     * Ensures this Subject implies the specified permission String.<a name="line.194"></a>
<span class="sourceLineNo">195</span>     * &lt;p/&gt;<a name="line.195"></a>
<span class="sourceLineNo">196</span>     * If this subject's existing associated permissions do not {@link Permission#implies(Permission)} imply}<a name="line.196"></a>
<span class="sourceLineNo">197</span>     * the given permission, an {@link org.apache.shiro.authz.AuthorizationException} will be thrown.<a name="line.197"></a>
<span class="sourceLineNo">198</span>     * &lt;p/&gt;<a name="line.198"></a>
<span class="sourceLineNo">199</span>     * This is an overloaded method for the corresponding type-safe {@link Permission Permission} variant.<a name="line.199"></a>
<span class="sourceLineNo">200</span>     * Please see the class-level JavaDoc for more information on these String-based permission methods.<a name="line.200"></a>
<span class="sourceLineNo">201</span>     *<a name="line.201"></a>
<span class="sourceLineNo">202</span>     * @param permission the String representation of the Permission to check.<a name="line.202"></a>
<span class="sourceLineNo">203</span>     * @throws org.apache.shiro.authz.AuthorizationException<a name="line.203"></a>
<span class="sourceLineNo">204</span>     *          if the user does not have the permission.<a name="line.204"></a>
<span class="sourceLineNo">205</span>     * @since 0.9<a name="line.205"></a>
<span class="sourceLineNo">206</span>     */<a name="line.206"></a>
<span class="sourceLineNo">207</span>    void checkPermission(String permission) throws AuthorizationException;<a name="line.207"></a>
<span class="sourceLineNo">208</span><a name="line.208"></a>
<span class="sourceLineNo">209</span>    /**<a name="line.209"></a>
<span class="sourceLineNo">210</span>     * Ensures this Subject {@link Permission#implies(Permission) implies} the specified {@code Permission}.<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * &lt;p/&gt;<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * If this subject's existing associated permissions do not {@link Permission#implies(Permission) imply}<a name="line.212"></a>
<span class="sourceLineNo">213</span>     * the given permission, an {@link org.apache.shiro.authz.AuthorizationException} will be thrown.<a name="line.213"></a>
<span class="sourceLineNo">214</span>     *<a name="line.214"></a>
<span class="sourceLineNo">215</span>     * @param permission the Permission to check.<a name="line.215"></a>
<span class="sourceLineNo">216</span>     * @throws org.apache.shiro.authz.AuthorizationException<a name="line.216"></a>
<span class="sourceLineNo">217</span>     *          if this Subject does not have the permission.<a name="line.217"></a>
<span class="sourceLineNo">218</span>     */<a name="line.218"></a>
<span class="sourceLineNo">219</span>    void checkPermission(Permission permission) throws AuthorizationException;<a name="line.219"></a>
<span class="sourceLineNo">220</span><a name="line.220"></a>
<span class="sourceLineNo">221</span>    /**<a name="line.221"></a>
<span class="sourceLineNo">222</span>     * Ensures this Subject<a name="line.222"></a>
<span class="sourceLineNo">223</span>     * {@link org.apache.shiro.authz.Permission#implies(org.apache.shiro.authz.Permission) implies} all of the<a name="line.223"></a>
<span class="sourceLineNo">224</span>     * specified permission strings.<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * &lt;p/&gt;<a name="line.225"></a>
<span class="sourceLineNo">226</span>     * If this subject's existing associated permissions do not<a name="line.226"></a>
<span class="sourceLineNo">227</span>     * {@link org.apache.shiro.authz.Permission#implies(org.apache.shiro.authz.Permission) imply} all of the given permissions,<a name="line.227"></a>
<span class="sourceLineNo">228</span>     * an {@link org.apache.shiro.authz.AuthorizationException} will be thrown.<a name="line.228"></a>
<span class="sourceLineNo">229</span>     * &lt;p/&gt;<a name="line.229"></a>
<span class="sourceLineNo">230</span>     * This is an overloaded method for the corresponding type-safe {@link Permission Permission} variant.<a name="line.230"></a>
<span class="sourceLineNo">231</span>     * Please see the class-level JavaDoc for more information on these String-based permission methods.<a name="line.231"></a>
<span class="sourceLineNo">232</span>     *<a name="line.232"></a>
<span class="sourceLineNo">233</span>     * @param permissions the string representations of Permissions to check.<a name="line.233"></a>
<span class="sourceLineNo">234</span>     * @throws AuthorizationException if this Subject does not have all of the given permissions.<a name="line.234"></a>
<span class="sourceLineNo">235</span>     * @since 0.9<a name="line.235"></a>
<span class="sourceLineNo">236</span>     */<a name="line.236"></a>
<span class="sourceLineNo">237</span>    void checkPermissions(String... permissions) throws AuthorizationException;<a name="line.237"></a>
<span class="sourceLineNo">238</span><a name="line.238"></a>
<span class="sourceLineNo">239</span>    /**<a name="line.239"></a>
<span class="sourceLineNo">240</span>     * Ensures this Subject<a name="line.240"></a>
<span class="sourceLineNo">241</span>     * {@link org.apache.shiro.authz.Permission#implies(org.apache.shiro.authz.Permission) implies} all of the<a name="line.241"></a>
<span class="sourceLineNo">242</span>     * specified permission strings.<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * &lt;p/&gt;<a name="line.243"></a>
<span class="sourceLineNo">244</span>     * If this subject's existing associated permissions do not<a name="line.244"></a>
<span class="sourceLineNo">245</span>     * {@link org.apache.shiro.authz.Permission#implies(org.apache.shiro.authz.Permission) imply} all of the given permissions,<a name="line.245"></a>
<span class="sourceLineNo">246</span>     * an {@link org.apache.shiro.authz.AuthorizationException} will be thrown.<a name="line.246"></a>
<span class="sourceLineNo">247</span>     *<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * @param permissions the Permissions to check.<a name="line.248"></a>
<span class="sourceLineNo">249</span>     * @throws AuthorizationException if this Subject does not have all of the given permissions.<a name="line.249"></a>
<span class="sourceLineNo">250</span>     */<a name="line.250"></a>
<span class="sourceLineNo">251</span>    void checkPermissions(Collection&lt;Permission&gt; permissions) throws AuthorizationException;<a name="line.251"></a>
<span class="sourceLineNo">252</span><a name="line.252"></a>
<span class="sourceLineNo">253</span>    /**<a name="line.253"></a>
<span class="sourceLineNo">254</span>     * Returns {@code true} if this Subject has the specified role, {@code false} otherwise.<a name="line.254"></a>
<span class="sourceLineNo">255</span>     *<a name="line.255"></a>
<span class="sourceLineNo">256</span>     * @param roleIdentifier the application-specific role identifier (usually a role id or role name).<a name="line.256"></a>
<span class="sourceLineNo">257</span>     * @return {@code true} if this Subject has the specified role, {@code false} otherwise.<a name="line.257"></a>
<span class="sourceLineNo">258</span>     */<a name="line.258"></a>
<span class="sourceLineNo">259</span>    boolean hasRole(String roleIdentifier);<a name="line.259"></a>
<span class="sourceLineNo">260</span><a name="line.260"></a>
<span class="sourceLineNo">261</span>    /**<a name="line.261"></a>
<span class="sourceLineNo">262</span>     * Checks if this Subject has the specified roles, returning a boolean array indicating<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * which roles are associated.<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * &lt;p/&gt;<a name="line.264"></a>
<span class="sourceLineNo">265</span>     * This is primarily a performance-enhancing method to help reduce the number of<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * {@link #hasRole} invocations over the wire in client/server systems.<a name="line.266"></a>
<span class="sourceLineNo">267</span>     *<a name="line.267"></a>
<span class="sourceLineNo">268</span>     * @param roleIdentifiers the application-specific role identifiers to check (usually role ids or role names).<a name="line.268"></a>
<span class="sourceLineNo">269</span>     * @return a boolean array where indices correspond to the index of the<a name="line.269"></a>
<span class="sourceLineNo">270</span>     *         roles in the given identifiers.  A true value indicates this Subject has the<a name="line.270"></a>
<span class="sourceLineNo">271</span>     *         role at that index.  False indicates this Subject does not have the role at that index.<a name="line.271"></a>
<span class="sourceLineNo">272</span>     */<a name="line.272"></a>
<span class="sourceLineNo">273</span>    boolean[] hasRoles(List&lt;String&gt; roleIdentifiers);<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>    /**<a name="line.275"></a>
<span class="sourceLineNo">276</span>     * Returns {@code true} if this Subject has all of the specified roles, {@code false} otherwise.<a name="line.276"></a>
<span class="sourceLineNo">277</span>     *<a name="line.277"></a>
<span class="sourceLineNo">278</span>     * @param roleIdentifiers the application-specific role identifiers to check (usually role ids or role names).<a name="line.278"></a>
<span class="sourceLineNo">279</span>     * @return true if this Subject has all the roles, false otherwise.<a name="line.279"></a>
<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
<span class="sourceLineNo">281</span>    boolean hasAllRoles(Collection&lt;String&gt; roleIdentifiers);<a name="line.281"></a>
<span class="sourceLineNo">282</span><a name="line.282"></a>
<span class="sourceLineNo">283</span>    /**<a name="line.283"></a>
<span class="sourceLineNo">284</span>     * Asserts this Subject has the specified role by returning quietly if they do or throwing an<a name="line.284"></a>
<span class="sourceLineNo">285</span>     * {@link org.apache.shiro.authz.AuthorizationException} if they do not.<a name="line.285"></a>
<span class="sourceLineNo">286</span>     *<a name="line.286"></a>
<span class="sourceLineNo">287</span>     * @param roleIdentifier the application-specific role identifier (usually a role id or role name ).<a name="line.287"></a>
<span class="sourceLineNo">288</span>     * @throws org.apache.shiro.authz.AuthorizationException<a name="line.288"></a>
<span class="sourceLineNo">289</span>     *          if this Subject does not have the role.<a name="line.289"></a>
<span class="sourceLineNo">290</span>     */<a name="line.290"></a>
<span class="sourceLineNo">291</span>    void checkRole(String roleIdentifier) throws AuthorizationException;<a name="line.291"></a>
<span class="sourceLineNo">292</span><a name="line.292"></a>
<span class="sourceLineNo">293</span>    /**<a name="line.293"></a>
<span class="sourceLineNo">294</span>     * Asserts this Subject has all of the specified roles by returning quietly if they do or throwing an<a name="line.294"></a>
<span class="sourceLineNo">295</span>     * {@link org.apache.shiro.authz.AuthorizationException} if they do not.<a name="line.295"></a>
<span class="sourceLineNo">296</span>     *<a name="line.296"></a>
<span class="sourceLineNo">297</span>     * @param roleIdentifiers the application-specific role identifiers to check (usually role ids or role names).<a name="line.297"></a>
<span class="sourceLineNo">298</span>     * @throws org.apache.shiro.authz.AuthorizationException<a name="line.298"></a>
<span class="sourceLineNo">299</span>     *          if this Subject does not have all of the specified roles.<a name="line.299"></a>
<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
<span class="sourceLineNo">301</span>    void checkRoles(Collection&lt;String&gt; roleIdentifiers) throws AuthorizationException;<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>    /**<a name="line.303"></a>
<span class="sourceLineNo">304</span>     * Same as {@link #checkRoles(Collection&lt;String&gt; roleIdentifiers) checkRoles(Collection&lt;String&gt; roleIdentifiers)} but<a name="line.304"></a>
<span class="sourceLineNo">305</span>     * doesn't require a collection as a an argument.<a name="line.305"></a>
<span class="sourceLineNo">306</span>     * Asserts this Subject has all of the specified roles by returning quietly if they do or throwing an<a name="line.306"></a>
<span class="sourceLineNo">307</span>     * {@link org.apache.shiro.authz.AuthorizationException} if they do not.<a name="line.307"></a>
<span class="sourceLineNo">308</span>     *<a name="line.308"></a>
<span class="sourceLineNo">309</span>     * @param roleIdentifiers roleIdentifiers the application-specific role identifiers to check (usually role ids or role names).<a name="line.309"></a>
<span class="sourceLineNo">310</span>     * @throws AuthorizationException org.apache.shiro.authz.AuthorizationException<a name="line.310"></a>
<span class="sourceLineNo">311</span>     *          if this Subject does not have all of the specified roles.<a name="line.311"></a>
<span class="sourceLineNo">312</span>     * @since 1.1.0<a name="line.312"></a>
<span class="sourceLineNo">313</span>     */<a name="line.313"></a>
<span class="sourceLineNo">314</span>    void checkRoles(String... roleIdentifiers) throws AuthorizationException;<a name="line.314"></a>
<span class="sourceLineNo">315</span><a name="line.315"></a>
<span class="sourceLineNo">316</span>    /**<a name="line.316"></a>
<span class="sourceLineNo">317</span>     * Performs a login attempt for this Subject/user.  If unsuccessful,<a name="line.317"></a>
<span class="sourceLineNo">318</span>     * an {@link AuthenticationException} is thrown, the subclass of which identifies why the attempt failed.<a name="line.318"></a>
<span class="sourceLineNo">319</span>     * If successful, the account data associated with the submitted principals/credentials will be<a name="line.319"></a>
<span class="sourceLineNo">320</span>     * associated with this {@code Subject} and the method will return quietly.<a name="line.320"></a>
<span class="sourceLineNo">321</span>     * &lt;p/&gt;<a name="line.321"></a>
<span class="sourceLineNo">322</span>     * Upon returning quietly, this {@code Subject} instance can be considered<a name="line.322"></a>
<span class="sourceLineNo">323</span>     * authenticated and {@link #getPrincipal() getPrincipal()} will be non-null and<a name="line.323"></a>
<span class="sourceLineNo">324</span>     * {@link #isAuthenticated() isAuthenticated()} will be {@code true}.<a name="line.324"></a>
<span class="sourceLineNo">325</span>     *<a name="line.325"></a>
<span class="sourceLineNo">326</span>     * @param token the token encapsulating the subject's principals and credentials to be passed to the<a name="line.326"></a>
<span class="sourceLineNo">327</span>     *              Authentication subsystem for verification.<a name="line.327"></a>
<span class="sourceLineNo">328</span>     * @throws org.apache.shiro.authc.AuthenticationException<a name="line.328"></a>
<span class="sourceLineNo">329</span>     *          if the authentication attempt fails.<a name="line.329"></a>
<span class="sourceLineNo">330</span>     * @since 0.9<a name="line.330"></a>
<span class="sourceLineNo">331</span>     */<a name="line.331"></a>
<span class="sourceLineNo">332</span>    void login(AuthenticationToken token) throws AuthenticationException;<a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
<span class="sourceLineNo">334</span>    /**<a name="line.334"></a>
<span class="sourceLineNo">335</span>     * Returns {@code true} if this Subject/user proved their identity &lt;em&gt;during their current session&lt;/em&gt;<a name="line.335"></a>
<span class="sourceLineNo">336</span>     * by providing valid credentials matching those known to the system, {@code false} otherwise.<a name="line.336"></a>
<span class="sourceLineNo">337</span>     * &lt;p/&gt;<a name="line.337"></a>
<span class="sourceLineNo">338</span>     * Note that even if this Subject's identity has been remembered via 'remember me' services, this method will<a name="line.338"></a>
<span class="sourceLineNo">339</span>     * still return {@code false} unless the user has actually logged in with proper credentials &lt;em&gt;during their<a name="line.339"></a>
<span class="sourceLineNo">340</span>     * current session&lt;/em&gt;.  See the {@link #isRemembered() isRemembered()} method JavaDoc for more.<a name="line.340"></a>
<span class="sourceLineNo">341</span>     *<a name="line.341"></a>
<span class="sourceLineNo">342</span>     * @return {@code true} if this Subject proved their identity during their current session<a name="line.342"></a>
<span class="sourceLineNo">343</span>     *         by providing valid credentials matching those known to the system, {@code false} otherwise.<a name="line.343"></a>
<span class="sourceLineNo">344</span>     * @since 0.9<a name="line.344"></a>
<span class="sourceLineNo">345</span>     */<a name="line.345"></a>
<span class="sourceLineNo">346</span>    boolean isAuthenticated();<a name="line.346"></a>
<span class="sourceLineNo">347</span><a name="line.347"></a>
<span class="sourceLineNo">348</span><a name="line.348"></a>
<span class="sourceLineNo">349</span>    /**<a name="line.349"></a>
<span class="sourceLineNo">350</span>     * Returns {@code true} if this {@code Subject} has an identity (it is not anonymous) and the identity<a name="line.350"></a>
<span class="sourceLineNo">351</span>     * (aka {@link #getPrincipals() principals}) is remembered from a successful authentication during a previous<a name="line.351"></a>
<span class="sourceLineNo">352</span>     * session.<a name="line.352"></a>
<span class="sourceLineNo">353</span>     * &lt;p/&gt;<a name="line.353"></a>
<span class="sourceLineNo">354</span>     * Although the underlying implementation determines exactly how this method functions, most implementations have<a name="line.354"></a>
<span class="sourceLineNo">355</span>     * this method act as the logical equivalent to this code:<a name="line.355"></a>
<span class="sourceLineNo">356</span>     * &lt;pre&gt;<a name="line.356"></a>
<span class="sourceLineNo">357</span>     * {@link #getPrincipal() getPrincipal()} != null &amp;&amp; !{@link #isAuthenticated() isAuthenticated()}&lt;/pre&gt;<a name="line.357"></a>
<span class="sourceLineNo">358</span>     * &lt;p/&gt;<a name="line.358"></a>
<span class="sourceLineNo">359</span>     * Note as indicated by the above code example, if a {@code Subject} is remembered, they are<a name="line.359"></a>
<span class="sourceLineNo">360</span>     * &lt;em&gt;NOT&lt;/em&gt; considered authenticated.  A check against {@link #isAuthenticated() isAuthenticated()} is a more<a name="line.360"></a>
<span class="sourceLineNo">361</span>     * strict check than that reflected by this method.  For example, a check to see if a subject can access financial<a name="line.361"></a>
<span class="sourceLineNo">362</span>     * information should almost always depend on {@link #isAuthenticated() isAuthenticated()} to &lt;em&gt;guarantee&lt;/em&gt; a<a name="line.362"></a>
<span class="sourceLineNo">363</span>     * verified identity, and not this method.<a name="line.363"></a>
<span class="sourceLineNo">364</span>     * &lt;p/&gt;<a name="line.364"></a>
<span class="sourceLineNo">365</span>     * Once the subject is authenticated, they are no longer considered only remembered because their identity would<a name="line.365"></a>
<span class="sourceLineNo">366</span>     * have been verified during the current session.<a name="line.366"></a>
<span class="sourceLineNo">367</span>     * &lt;h4&gt;Remembered vs Authenticated&lt;/h4&gt;<a name="line.367"></a>
<span class="sourceLineNo">368</span>     * Authentication is the process of &lt;em&gt;proving&lt;/em&gt; you are who you say you are.  When a user is only remembered,<a name="line.368"></a>
<span class="sourceLineNo">369</span>     * the remembered identity gives the system an idea who that user probably is, but in reality, has no way of<a name="line.369"></a>
<span class="sourceLineNo">370</span>     * absolutely &lt;em&gt;guaranteeing&lt;/em&gt; if the remembered {@code Subject} represents the user currently<a name="line.370"></a>
<span class="sourceLineNo">371</span>     * using the application.<a name="line.371"></a>
<span class="sourceLineNo">372</span>     * &lt;p/&gt;<a name="line.372"></a>
<span class="sourceLineNo">373</span>     * So although many parts of the application can still perform user-specific logic based on the remembered<a name="line.373"></a>
<span class="sourceLineNo">374</span>     * {@link #getPrincipals() principals}, such as customized views, it should never perform highly-sensitive<a name="line.374"></a>
<span class="sourceLineNo">375</span>     * operations until the user has legitimately verified their identity by executing a successful authentication<a name="line.375"></a>
<span class="sourceLineNo">376</span>     * attempt.<a name="line.376"></a>
<span class="sourceLineNo">377</span>     * &lt;p/&gt;<a name="line.377"></a>
<span class="sourceLineNo">378</span>     * We see this paradigm all over the web, and we will use &lt;a href="http://www.amazon.com"&gt;Amazon.com&lt;/a&gt; as an<a name="line.378"></a>
<span class="sourceLineNo">379</span>     * example:<a name="line.379"></a>
<span class="sourceLineNo">380</span>     * &lt;p/&gt;<a name="line.380"></a>
<span class="sourceLineNo">381</span>     * When you visit Amazon.com and perform a login and ask it to 'remember me', it will set a cookie with your<a name="line.381"></a>
<span class="sourceLineNo">382</span>     * identity.  If you don't log out and your session expires, and you come back, say the next day, Amazon still knows<a name="line.382"></a>
<span class="sourceLineNo">383</span>     * who you &lt;em&gt;probably&lt;/em&gt; are: you still see all of your book and movie recommendations and similar user-specific<a name="line.383"></a>
<span class="sourceLineNo">384</span>     * features since these are based on your (remembered) user id.<a name="line.384"></a>
<span class="sourceLineNo">385</span>     * &lt;p/&gt;<a name="line.385"></a>
<span class="sourceLineNo">386</span>     * BUT, if you try to do something sensitive, such as access your account's billing data, Amazon forces you<a name="line.386"></a>
<span class="sourceLineNo">387</span>     * to do an actual log-in, requiring your username and password.<a name="line.387"></a>
<span class="sourceLineNo">388</span>     * &lt;p/&gt;<a name="line.388"></a>
<span class="sourceLineNo">389</span>     * This is because although amazon.com assumed your identity from 'remember me', it recognized that you were not<a name="line.389"></a>
<span class="sourceLineNo">390</span>     * actually authenticated.  The only way to really guarantee you are who you say you are, and therefore allow you<a name="line.390"></a>
<span class="sourceLineNo">391</span>     * access to sensitive account data, is to force you to perform an actual successful authentication.  You can<a name="line.391"></a>
<span class="sourceLineNo">392</span>     * check this guarantee via the {@link #isAuthenticated() isAuthenticated()} method and not via this method.<a name="line.392"></a>
<span class="sourceLineNo">393</span>     *<a name="line.393"></a>
<span class="sourceLineNo">394</span>     * @return {@code true} if this {@code Subject}'s identity (aka {@link #getPrincipals() principals}) is<a name="line.394"></a>
<span class="sourceLineNo">395</span>     *         remembered from a successful authentication during a previous session, {@code false} otherwise.<a name="line.395"></a>
<span class="sourceLineNo">396</span>     * @since 1.0<a name="line.396"></a>
<span class="sourceLineNo">397</span>     */<a name="line.397"></a>
<span class="sourceLineNo">398</span>    boolean isRemembered();<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>    /**<a name="line.400"></a>
<span class="sourceLineNo">401</span>     * Returns the application {@code Session} associated with this Subject.  If no session exists when this<a name="line.401"></a>
<span class="sourceLineNo">402</span>     * method is called, a new session will be created, associated with this Subject, and then returned.<a name="line.402"></a>
<span class="sourceLineNo">403</span>     *<a name="line.403"></a>
<span class="sourceLineNo">404</span>     * @return the application {@code Session} associated with this Subject.<a name="line.404"></a>
<span class="sourceLineNo">405</span>     * @see #getSession(boolean)<a name="line.405"></a>
<span class="sourceLineNo">406</span>     * @since 0.2<a name="line.406"></a>
<span class="sourceLineNo">407</span>     */<a name="line.407"></a>
<span class="sourceLineNo">408</span>    Session getSession();<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
<span class="sourceLineNo">410</span>    /**<a name="line.410"></a>
<span class="sourceLineNo">411</span>     * Returns the application {@code Session} associated with this Subject.  Based on the boolean argument,<a name="line.411"></a>
<span class="sourceLineNo">412</span>     * this method functions as follows:<a name="line.412"></a>
<span class="sourceLineNo">413</span>     * &lt;ul&gt;<a name="line.413"></a>
<span class="sourceLineNo">414</span>     * &lt;li&gt;If there is already an existing session associated with this {@code Subject}, it is returned and<a name="line.414"></a>
<span class="sourceLineNo">415</span>     * the {@code create} argument is ignored.&lt;/li&gt;<a name="line.415"></a>
<span class="sourceLineNo">416</span>     * &lt;li&gt;If no session exists and {@code create} is {@code true}, a new session will be created, associated with<a name="line.416"></a>
<span class="sourceLineNo">417</span>     * this {@code Subject} and then returned.&lt;/li&gt;<a name="line.417"></a>
<span class="sourceLineNo">418</span>     * &lt;li&gt;If no session exists and {@code create} is {@code false}, {@code null} is returned.&lt;/li&gt;<a name="line.418"></a>
<span class="sourceLineNo">419</span>     * &lt;/ul&gt;<a name="line.419"></a>
<span class="sourceLineNo">420</span>     *<a name="line.420"></a>
<span class="sourceLineNo">421</span>     * @param create boolean argument determining if a new session should be created or not if there is no existing session.<a name="line.421"></a>
<span class="sourceLineNo">422</span>     * @return the application {@code Session} associated with this {@code Subject} or {@code null} based<a name="line.422"></a>
<span class="sourceLineNo">423</span>     *         on the above described logic.<a name="line.423"></a>
<span class="sourceLineNo">424</span>     * @since 0.2<a name="line.424"></a>
<span class="sourceLineNo">425</span>     */<a name="line.425"></a>
<span class="sourceLineNo">426</span>    Session getSession(boolean create);<a name="line.426"></a>
<span class="sourceLineNo">427</span><a name="line.427"></a>
<span class="sourceLineNo">428</span>    /**<a name="line.428"></a>
<span class="sourceLineNo">429</span>     * Logs out this Subject and invalidates and/or removes any associated entities,<a name="line.429"></a>
<span class="sourceLineNo">430</span>     * such as a {@link Session Session} and authorization data.  After this method is called, the Subject is<a name="line.430"></a>
<span class="sourceLineNo">431</span>     * considered 'anonymous' and may continue to be used for another log-in if desired.<a name="line.431"></a>
<span class="sourceLineNo">432</span>     * &lt;h3&gt;Web Environment Warning&lt;/h3&gt;<a name="line.432"></a>
<span class="sourceLineNo">433</span>     * Calling this method in web environments will usually remove any associated session cookie as part of<a name="line.433"></a>
<span class="sourceLineNo">434</span>     * session invalidation.  Because cookies are part of the HTTP header, and headers can only be set before the<a name="line.434"></a>
<span class="sourceLineNo">435</span>     * response body (html, image, etc) is sent, this method in web environments must be called before &lt;em&gt;any&lt;/em&gt;<a name="line.435"></a>
<span class="sourceLineNo">436</span>     * content has been rendered.<a name="line.436"></a>
<span class="sourceLineNo">437</span>     * &lt;p/&gt;<a name="line.437"></a>
<span class="sourceLineNo">438</span>     * The typical approach most applications use in this scenario is to redirect the user to a different<a name="line.438"></a>
<span class="sourceLineNo">439</span>     * location (e.g. home page) immediately after calling this method.  This is an effect of the HTTP protocol<a name="line.439"></a>
<span class="sourceLineNo">440</span>     * itself and not a reflection of Shiro's implementation.<a name="line.440"></a>
<span class="sourceLineNo">441</span>     * &lt;p/&gt;<a name="line.441"></a>
<span class="sourceLineNo">442</span>     * Non-HTTP environments may of course use a logged-out subject for login again if desired.<a name="line.442"></a>
<span class="sourceLineNo">443</span>     */<a name="line.443"></a>
<span class="sourceLineNo">444</span>    void logout();<a name="line.444"></a>
<span class="sourceLineNo">445</span><a name="line.445"></a>
<span class="sourceLineNo">446</span>    /**<a name="line.446"></a>
<span class="sourceLineNo">447</span>     * Associates the specified {@code Callable} with this {@code Subject} instance and then executes it on the<a name="line.447"></a>
<span class="sourceLineNo">448</span>     * currently running thread.  If you want to execute the {@code Callable} on a different thread, it is better to<a name="line.448"></a>
<span class="sourceLineNo">449</span>     * use the {@link #associateWith(Callable)} method instead.<a name="line.449"></a>
<span class="sourceLineNo">450</span>     *<a name="line.450"></a>
<span class="sourceLineNo">451</span>     * @param callable the Callable to associate with this subject and then execute.<a name="line.451"></a>
<span class="sourceLineNo">452</span>     * @param &lt;V&gt;      the type of return value the {@code Callable} will return<a name="line.452"></a>
<span class="sourceLineNo">453</span>     * @return the resulting object returned by the {@code Callable}'s execution.<a name="line.453"></a>
<span class="sourceLineNo">454</span>     * @throws ExecutionException if the {@code Callable}'s {@link Callable#call call} method throws an exception.<a name="line.454"></a>
<span class="sourceLineNo">455</span>     * @since 1.0<a name="line.455"></a>
<span class="sourceLineNo">456</span>     */<a name="line.456"></a>
<span class="sourceLineNo">457</span>    &lt;V&gt; V execute(Callable&lt;V&gt; callable) throws ExecutionException;<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>    /**<a name="line.459"></a>
<span class="sourceLineNo">460</span>     * Associates the specified {@code Runnable} with this {@code Subject} instance and then executes it on the<a name="line.460"></a>
<span class="sourceLineNo">461</span>     * currently running thread.  If you want to execute the {@code Runnable} on a different thread, it is better to<a name="line.461"></a>
<span class="sourceLineNo">462</span>     * use the {@link #associateWith(Runnable)} method instead.<a name="line.462"></a>
<span class="sourceLineNo">463</span>     * &lt;p/&gt;<a name="line.463"></a>
<span class="sourceLineNo">464</span>     * &lt;b&gt;Note&lt;/b&gt;: This method is primarily provided to execute existing/legacy Runnable implementations.  It is better<a name="line.464"></a>
<span class="sourceLineNo">465</span>     * for new code to use {@link #execute(Callable)} since that supports the ability to return values and catch<a name="line.465"></a>
<span class="sourceLineNo">466</span>     * exceptions.<a name="line.466"></a>
<span class="sourceLineNo">467</span>     *<a name="line.467"></a>
<span class="sourceLineNo">468</span>     * @param runnable the {@code Runnable} to associate with this {@code Subject} and then execute.<a name="line.468"></a>
<span class="sourceLineNo">469</span>     * @since 1.0<a name="line.469"></a>
<span class="sourceLineNo">470</span>     */<a name="line.470"></a>
<span class="sourceLineNo">471</span>    void execute(Runnable runnable);<a name="line.471"></a>
<span class="sourceLineNo">472</span><a name="line.472"></a>
<span class="sourceLineNo">473</span>    /**<a name="line.473"></a>
<span class="sourceLineNo">474</span>     * Returns a {@code Callable} instance matching the given argument while additionally ensuring that it will<a name="line.474"></a>
<span class="sourceLineNo">475</span>     * retain and execute under this Subject's identity.  The returned object can be used with an<a name="line.475"></a>
<span class="sourceLineNo">476</span>     * {@link java.util.concurrent.ExecutorService ExecutorService} to execute as this Subject.<a name="line.476"></a>
<span class="sourceLineNo">477</span>     * &lt;p/&gt;<a name="line.477"></a>
<span class="sourceLineNo">478</span>     * This will effectively ensure that any calls to<a name="line.478"></a>
<span class="sourceLineNo">479</span>     * {@code SecurityUtils}.{@link SecurityUtils#getSubject() getSubject()} and related functionality will continue<a name="line.479"></a>
<span class="sourceLineNo">480</span>     * to function properly on any thread that executes the returned {@code Callable} instance.<a name="line.480"></a>
<span class="sourceLineNo">481</span>     *<a name="line.481"></a>
<span class="sourceLineNo">482</span>     * @param callable the callable to execute as this {@code Subject}<a name="line.482"></a>
<span class="sourceLineNo">483</span>     * @param &lt;V&gt;      the {@code Callable}s return value type<a name="line.483"></a>
<span class="sourceLineNo">484</span>     * @return a {@code Callable} that can be run as this {@code Subject}.<a name="line.484"></a>
<span class="sourceLineNo">485</span>     * @since 1.0<a name="line.485"></a>
<span class="sourceLineNo">486</span>     */<a name="line.486"></a>
<span class="sourceLineNo">487</span>    &lt;V&gt; Callable&lt;V&gt; associateWith(Callable&lt;V&gt; callable);<a name="line.487"></a>
<span class="sourceLineNo">488</span><a name="line.488"></a>
<span class="sourceLineNo">489</span>    /**<a name="line.489"></a>
<span class="sourceLineNo">490</span>     * Returns a {@code Runnable} instance matching the given argument while additionally ensuring that it will<a name="line.490"></a>
<span class="sourceLineNo">491</span>     * retain and execute under this Subject's identity.  The returned object can be used with an<a name="line.491"></a>
<span class="sourceLineNo">492</span>     * {@link java.util.concurrent.Executor Executor} or another thread to execute as this Subject.<a name="line.492"></a>
<span class="sourceLineNo">493</span>     * &lt;p/&gt;<a name="line.493"></a>
<span class="sourceLineNo">494</span>     * This will effectively ensure that any calls to<a name="line.494"></a>
<span class="sourceLineNo">495</span>     * {@code SecurityUtils}.{@link SecurityUtils#getSubject() getSubject()} and related functionality will continue<a name="line.495"></a>
<span class="sourceLineNo">496</span>     * to function properly on any thread that executes the returned {@code Runnable} instance.<a name="line.496"></a>
<span class="sourceLineNo">497</span>     * &lt;p/&gt;<a name="line.497"></a>
<span class="sourceLineNo">498</span>     * *Note that if you need a return value to be returned as a result of the runnable's execution or if you need to<a name="line.498"></a>
<span class="sourceLineNo">499</span>     * react to any Exceptions, it is highly recommended to use the<a name="line.499"></a>
<span class="sourceLineNo">500</span>     * {@link #associateWith(java.util.concurrent.Callable) createCallable} method instead of this one.<a name="line.500"></a>
<span class="sourceLineNo">501</span>     *<a name="line.501"></a>
<span class="sourceLineNo">502</span>     * @param runnable the runnable to execute as this {@code Subject}<a name="line.502"></a>
<span class="sourceLineNo">503</span>     * @return a {@code Runnable} that can be run as this {@code Subject} on another thread.<a name="line.503"></a>
<span class="sourceLineNo">504</span>     * @see #associateWith (java.util.concurrent.Callable)<a name="line.504"></a>
<span class="sourceLineNo">505</span>     * @since 1.0<a name="line.505"></a>
<span class="sourceLineNo">506</span>     */<a name="line.506"></a>
<span class="sourceLineNo">507</span>    Runnable associateWith(Runnable runnable);<a name="line.507"></a>
<span class="sourceLineNo">508</span><a name="line.508"></a>
<span class="sourceLineNo">509</span>    /**<a name="line.509"></a>
<span class="sourceLineNo">510</span>     * Allows this subject to 'run as' or 'assume' another identity indefinitely.  This can only be<a name="line.510"></a>
<span class="sourceLineNo">511</span>     * called when the {@code Subject} instance already has an identity (i.e. they are remembered from a previous<a name="line.511"></a>
<span class="sourceLineNo">512</span>     * log-in or they have authenticated during their current session).<a name="line.512"></a>
<span class="sourceLineNo">513</span>     * &lt;p/&gt;<a name="line.513"></a>
<span class="sourceLineNo">514</span>     * Some notes about {@code runAs}:<a name="line.514"></a>
<span class="sourceLineNo">515</span>     * &lt;ul&gt;<a name="line.515"></a>
<span class="sourceLineNo">516</span>     * &lt;li&gt;You can tell if a {@code Subject} is 'running as' another identity by calling the<a name="line.516"></a>
<span class="sourceLineNo">517</span>     * {@link #isRunAs() isRunAs()} method.&lt;/li&gt;<a name="line.517"></a>
<span class="sourceLineNo">518</span>     * &lt;li&gt;If running as another identity, you can determine what the previous 'pre run as' identity<a name="line.518"></a>
<span class="sourceLineNo">519</span>     * was by calling the {@link #getPreviousPrincipals() getPreviousPrincipals()} method.&lt;/li&gt;<a name="line.519"></a>
<span class="sourceLineNo">520</span>     * &lt;li&gt;When you want a {@code Subject} to stop running as another identity, you can return to its previous<a name="line.520"></a>
<span class="sourceLineNo">521</span>     * 'pre run as' identity by calling the {@link #releaseRunAs() releaseRunAs()} method.&lt;/li&gt;<a name="line.521"></a>
<span class="sourceLineNo">522</span>     * &lt;/ul&gt;<a name="line.522"></a>
<span class="sourceLineNo">523</span>     *<a name="line.523"></a>
<span class="sourceLineNo">524</span>     * @param principals the identity to 'run as', aka the identity to &lt;em&gt;assume&lt;/em&gt; indefinitely.<a name="line.524"></a>
<span class="sourceLineNo">525</span>     * @throws NullPointerException  if the specified principals collection is {@code null} or empty.<a name="line.525"></a>
<span class="sourceLineNo">526</span>     * @throws IllegalStateException if this {@code Subject} does not yet have an identity of its own.<a name="line.526"></a>
<span class="sourceLineNo">527</span>     * @since 1.0<a name="line.527"></a>
<span class="sourceLineNo">528</span>     */<a name="line.528"></a>
<span class="sourceLineNo">529</span>    void runAs(PrincipalCollection principals) throws NullPointerException, IllegalStateException;<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>    /**<a name="line.531"></a>
<span class="sourceLineNo">532</span>     * Returns {@code true} if this {@code Subject} is 'running as' another identity other than its original one or<a name="line.532"></a>
<span class="sourceLineNo">533</span>     * {@code false} otherwise (normal {@code Subject} state).  See the {@link #runAs runAs} method for more<a name="line.533"></a>
<span class="sourceLineNo">534</span>     * information.<a name="line.534"></a>
<span class="sourceLineNo">535</span>     *<a name="line.535"></a>
<span class="sourceLineNo">536</span>     * @return {@code true} if this {@code Subject} is 'running as' another identity other than its original one or<a name="line.536"></a>
<span class="sourceLineNo">537</span>     *         {@code false} otherwise (normal {@code Subject} state).<a name="line.537"></a>
<span class="sourceLineNo">538</span>     * @see #runAs<a name="line.538"></a>
<span class="sourceLineNo">539</span>     * @since 1.0<a name="line.539"></a>
<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
<span class="sourceLineNo">541</span>    boolean isRunAs();<a name="line.541"></a>
<span class="sourceLineNo">542</span><a name="line.542"></a>
<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
<span class="sourceLineNo">544</span>     * Returns the previous 'pre run as' identity of this {@code Subject} before assuming the current<a name="line.544"></a>
<span class="sourceLineNo">545</span>     * {@link #runAs runAs} identity, or {@code null} if this {@code Subject} is not operating under an assumed<a name="line.545"></a>
<span class="sourceLineNo">546</span>     * identity (normal state). See the {@link #runAs runAs} method for more information.<a name="line.546"></a>
<span class="sourceLineNo">547</span>     *<a name="line.547"></a>
<span class="sourceLineNo">548</span>     * @return the previous 'pre run as' identity of this {@code Subject} before assuming the current<a name="line.548"></a>
<span class="sourceLineNo">549</span>     *         {@link #runAs runAs} identity, or {@code null} if this {@code Subject} is not operating under an assumed<a name="line.549"></a>
<span class="sourceLineNo">550</span>     *         identity (normal state).<a name="line.550"></a>
<span class="sourceLineNo">551</span>     * @see #runAs<a name="line.551"></a>
<span class="sourceLineNo">552</span>     * @since 1.0<a name="line.552"></a>
<span class="sourceLineNo">553</span>     */<a name="line.553"></a>
<span class="sourceLineNo">554</span>    PrincipalCollection getPreviousPrincipals();<a name="line.554"></a>
<span class="sourceLineNo">555</span><a name="line.555"></a>
<span class="sourceLineNo">556</span>    /**<a name="line.556"></a>
<span class="sourceLineNo">557</span>     * Releases the current 'run as' (assumed) identity and reverts back to the previous 'pre run as'<a name="line.557"></a>
<span class="sourceLineNo">558</span>     * identity that existed before {@code #runAs runAs} was called.<a name="line.558"></a>
<span class="sourceLineNo">559</span>     * &lt;p/&gt;<a name="line.559"></a>
<span class="sourceLineNo">560</span>     * This method returns 'run as' (assumed) identity being released or {@code null} if this {@code Subject} is not<a name="line.560"></a>
<span class="sourceLineNo">561</span>     * operating under an assumed identity.<a name="line.561"></a>
<span class="sourceLineNo">562</span>     *<a name="line.562"></a>
<span class="sourceLineNo">563</span>     * @return the 'run as' (assumed) identity being released or {@code null} if this {@code Subject} is not operating<a name="line.563"></a>
<span class="sourceLineNo">564</span>     *         under an assumed identity.<a name="line.564"></a>
<span class="sourceLineNo">565</span>     * @see #runAs<a name="line.565"></a>
<span class="sourceLineNo">566</span>     * @since 1.0<a name="line.566"></a>
<span class="sourceLineNo">567</span>     */<a name="line.567"></a>
<span class="sourceLineNo">568</span>    PrincipalCollection releaseRunAs();<a name="line.568"></a>
<span class="sourceLineNo">569</span><a name="line.569"></a>
<span class="sourceLineNo">570</span>    /**<a name="line.570"></a>
<span class="sourceLineNo">571</span>     * Builder design pattern implementation for creating {@link Subject} instances in a simplified way without<a name="line.571"></a>
<span class="sourceLineNo">572</span>     * requiring knowledge of Shiro's construction techniques.<a name="line.572"></a>
<span class="sourceLineNo">573</span>     * &lt;p/&gt;<a name="line.573"></a>
<span class="sourceLineNo">574</span>     * &lt;b&gt;NOTE&lt;/b&gt;: This is provided for framework development support only and should typically never be used by<a name="line.574"></a>
<span class="sourceLineNo">575</span>     * application developers.  {@code Subject} instances should generally be acquired by using<a name="line.575"></a>
<span class="sourceLineNo">576</span>     * &lt;code&gt;SecurityUtils.{@link SecurityUtils#getSubject() getSubject()}&lt;/code&gt;<a name="line.576"></a>
<span class="sourceLineNo">577</span>     * &lt;h4&gt;Usage&lt;/h4&gt;<a name="line.577"></a>
<span class="sourceLineNo">578</span>     * The simplest usage of this builder is to construct an anonymous, session-less {@code Subject} instance:<a name="line.578"></a>
<span class="sourceLineNo">579</span>     * &lt;pre&gt;<a name="line.579"></a>
<span class="sourceLineNo">580</span>     * Subject subject = new Subject.{@link #Builder() Builder}().{@link #buildSubject() buildSubject()};&lt;/pre&gt;<a name="line.580"></a>
<span class="sourceLineNo">581</span>     * The default, no-arg {@code Subject.Builder()} constructor shown above will use the application's<a name="line.581"></a>
<span class="sourceLineNo">582</span>     * currently accessible {@code SecurityManager} via<a name="line.582"></a>
<span class="sourceLineNo">583</span>     * &lt;code&gt;SecurityUtils.{@link SecurityUtils#getSecurityManager() getSecurityManager()}&lt;/code&gt;.  You may also<a name="line.583"></a>
<span class="sourceLineNo">584</span>     * specify the exact {@code SecurityManager} instance to be used by the additional<a name="line.584"></a>
<span class="sourceLineNo">585</span>     * &lt;code&gt;Subject.{@link #Builder(org.apache.shiro.mgt.SecurityManager) Builder(securityManager)}&lt;/code&gt;<a name="line.585"></a>
<span class="sourceLineNo">586</span>     * constructor if desired.<a name="line.586"></a>
<span class="sourceLineNo">587</span>     * &lt;p/&gt;<a name="line.587"></a>
<span class="sourceLineNo">588</span>     * All other methods may be called before the {@link #buildSubject() buildSubject()} method to<a name="line.588"></a>
<span class="sourceLineNo">589</span>     * provide context on how to construct the {@code Subject} instance.  For example, if you have a session id and<a name="line.589"></a>
<span class="sourceLineNo">590</span>     * want to acquire the {@code Subject} that 'owns' that session (assuming the session exists and is not expired):<a name="line.590"></a>
<span class="sourceLineNo">591</span>     * &lt;pre&gt;<a name="line.591"></a>
<span class="sourceLineNo">592</span>     * Subject subject = new Subject.Builder().sessionId(sessionId).buildSubject();&lt;/pre&gt;<a name="line.592"></a>
<span class="sourceLineNo">593</span>     * &lt;p/&gt;<a name="line.593"></a>
<span class="sourceLineNo">594</span>     * Similarly, if you want a {@code Subject} instance reflecting a certain identity:<a name="line.594"></a>
<span class="sourceLineNo">595</span>     * &lt;pre&gt;<a name="line.595"></a>
<span class="sourceLineNo">596</span>     * PrincipalCollection principals = new SimplePrincipalCollection("username", &lt;em&gt;yourRealmName&lt;/em&gt;);<a name="line.596"></a>
<span class="sourceLineNo">597</span>     * Subject subject = new Subject.Builder().principals(principals).build();&lt;/pre&gt;<a name="line.597"></a>
<span class="sourceLineNo">598</span>     * &lt;p/&gt;<a name="line.598"></a>
<span class="sourceLineNo">599</span>     * &lt;b&gt;Note*&lt;/b&gt; that the returned {@code Subject} instance is &lt;b&gt;not&lt;/b&gt; automatically bound to the application (thread)<a name="line.599"></a>
<span class="sourceLineNo">600</span>     * for further use.  That is,<a name="line.600"></a>
<span class="sourceLineNo">601</span>     * {@link org.apache.shiro.SecurityUtils SecurityUtils}.{@link org.apache.shiro.SecurityUtils#getSubject() getSubject()}<a name="line.601"></a>
<span class="sourceLineNo">602</span>     * will not automatically return the same instance as what is returned by the builder.  It is up to the framework<a name="line.602"></a>
<span class="sourceLineNo">603</span>     * developer to bind the built {@code Subject} for continued use if desired.<a name="line.603"></a>
<span class="sourceLineNo">604</span>     *<a name="line.604"></a>
<span class="sourceLineNo">605</span>     * @since 1.0<a name="line.605"></a>
<span class="sourceLineNo">606</span>     */<a name="line.606"></a>
<span class="sourceLineNo">607</span>    public static class Builder {<a name="line.607"></a>
<span class="sourceLineNo">608</span><a name="line.608"></a>
<span class="sourceLineNo">609</span>        /**<a name="line.609"></a>
<span class="sourceLineNo">610</span>         * Hold all contextual data via the Builder instance's method invocations to be sent to the<a name="line.610"></a>
<span class="sourceLineNo">611</span>         * {@code SecurityManager} during the {@link #buildSubject} call.<a name="line.611"></a>
<span class="sourceLineNo">612</span>         */<a name="line.612"></a>
<span class="sourceLineNo">613</span>        private final SubjectContext subjectContext;<a name="line.613"></a>
<span class="sourceLineNo">614</span><a name="line.614"></a>
<span class="sourceLineNo">615</span>        /**<a name="line.615"></a>
<span class="sourceLineNo">616</span>         * The SecurityManager to invoke during the {@link #buildSubject} call.<a name="line.616"></a>
<span class="sourceLineNo">617</span>         */<a name="line.617"></a>
<span class="sourceLineNo">618</span>        private final SecurityManager securityManager;<a name="line.618"></a>
<span class="sourceLineNo">619</span><a name="line.619"></a>
<span class="sourceLineNo">620</span>        /**<a name="line.620"></a>
<span class="sourceLineNo">621</span>         * Constructs a new {@link Subject.Builder} instance, using the {@code SecurityManager} instance available<a name="line.621"></a>
<span class="sourceLineNo">622</span>         * to the calling code as determined by a call to {@link org.apache.shiro.SecurityUtils#getSecurityManager()}<a name="line.622"></a>
<span class="sourceLineNo">623</span>         * to build the {@code Subject} instance.<a name="line.623"></a>
<span class="sourceLineNo">624</span>         */<a name="line.624"></a>
<span class="sourceLineNo">625</span>        public Builder() {<a name="line.625"></a>
<span class="sourceLineNo">626</span>            this(SecurityUtils.getSecurityManager());<a name="line.626"></a>
<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
<span class="sourceLineNo">628</span><a name="line.628"></a>
<span class="sourceLineNo">629</span>        /**<a name="line.629"></a>
<span class="sourceLineNo">630</span>         * Constructs a new {@link Subject.Builder} instance which will use the specified {@code SecurityManager} when<a name="line.630"></a>
<span class="sourceLineNo">631</span>         * building the {@code Subject} instance.<a name="line.631"></a>
<span class="sourceLineNo">632</span>         *<a name="line.632"></a>
<span class="sourceLineNo">633</span>         * @param securityManager the {@code SecurityManager} to use when building the {@code Subject} instance.<a name="line.633"></a>
<span class="sourceLineNo">634</span>         */<a name="line.634"></a>
<span class="sourceLineNo">635</span>        public Builder(SecurityManager securityManager) {<a name="line.635"></a>
<span class="sourceLineNo">636</span>            if (securityManager == null) {<a name="line.636"></a>
<span class="sourceLineNo">637</span>                throw new NullPointerException("SecurityManager method argument cannot be null.");<a name="line.637"></a>
<span class="sourceLineNo">638</span>            }<a name="line.638"></a>
<span class="sourceLineNo">639</span>            this.securityManager = securityManager;<a name="line.639"></a>
<span class="sourceLineNo">640</span>            this.subjectContext = newSubjectContextInstance();<a name="line.640"></a>
<span class="sourceLineNo">641</span>            if (this.subjectContext == null) {<a name="line.641"></a>
<span class="sourceLineNo">642</span>                throw new IllegalStateException("Subject instance returned from 'newSubjectContextInstance' " +<a name="line.642"></a>
<span class="sourceLineNo">643</span>                        "cannot be null.");<a name="line.643"></a>
<span class="sourceLineNo">644</span>            }<a name="line.644"></a>
<span class="sourceLineNo">645</span>            this.subjectContext.setSecurityManager(securityManager);<a name="line.645"></a>
<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
<span class="sourceLineNo">647</span><a name="line.647"></a>
<span class="sourceLineNo">648</span>        /**<a name="line.648"></a>
<span class="sourceLineNo">649</span>         * Creates a new {@code SubjectContext} instance to be used to populate with subject contextual data that<a name="line.649"></a>
<span class="sourceLineNo">650</span>         * will then be sent to the {@code SecurityManager} to create a new {@code Subject} instance.<a name="line.650"></a>
<span class="sourceLineNo">651</span>         *<a name="line.651"></a>
<span class="sourceLineNo">652</span>         * @return a new {@code SubjectContext} instance<a name="line.652"></a>
<span class="sourceLineNo">653</span>         */<a name="line.653"></a>
<span class="sourceLineNo">654</span>        protected SubjectContext newSubjectContextInstance() {<a name="line.654"></a>
<span class="sourceLineNo">655</span>            return new DefaultSubjectContext();<a name="line.655"></a>
<span class="sourceLineNo">656</span>        }<a name="line.656"></a>
<span class="sourceLineNo">657</span><a name="line.657"></a>
<span class="sourceLineNo">658</span>        /**<a name="line.658"></a>
<span class="sourceLineNo">659</span>         * Returns the backing context used to build the {@code Subject} instance, available to subclasses<a name="line.659"></a>
<span class="sourceLineNo">660</span>         * since the {@code context} class attribute is marked as {@code private}.<a name="line.660"></a>
<span class="sourceLineNo">661</span>         *<a name="line.661"></a>
<span class="sourceLineNo">662</span>         * @return the backing context used to build the {@code Subject} instance, available to subclasses.<a name="line.662"></a>
<span class="sourceLineNo">663</span>         */<a name="line.663"></a>
<span class="sourceLineNo">664</span>        protected SubjectContext getSubjectContext() {<a name="line.664"></a>
<span class="sourceLineNo">665</span>            return this.subjectContext;<a name="line.665"></a>
<span class="sourceLineNo">666</span>        }<a name="line.666"></a>
<span class="sourceLineNo">667</span><a name="line.667"></a>
<span class="sourceLineNo">668</span>        /**<a name="line.668"></a>
<span class="sourceLineNo">669</span>         * Enables building a {@link Subject Subject} instance that owns the {@link Session Session} with the<a name="line.669"></a>
<span class="sourceLineNo">670</span>         * specified {@code sessionId}.<a name="line.670"></a>
<span class="sourceLineNo">671</span>         * &lt;p/&gt;<a name="line.671"></a>
<span class="sourceLineNo">672</span>         * Usually when specifying a {@code sessionId}, no other {@code Builder} methods would be specified because<a name="line.672"></a>
<span class="sourceLineNo">673</span>         * everything else (principals, inet address, etc) can usually be reconstructed based on the referenced<a name="line.673"></a>
<span class="sourceLineNo">674</span>         * session alone.  In other words, this is almost always sufficient:<a name="line.674"></a>
<span class="sourceLineNo">675</span>         * &lt;pre&gt;<a name="line.675"></a>
<span class="sourceLineNo">676</span>         * new Subject.Builder().sessionId(sessionId).buildSubject();&lt;/pre&gt;<a name="line.676"></a>
<span class="sourceLineNo">677</span>         * &lt;p/&gt;<a name="line.677"></a>
<span class="sourceLineNo">678</span>         * &lt;b&gt;Although simple in concept, this method provides very powerful functionality previously absent in almost<a name="line.678"></a>
<span class="sourceLineNo">679</span>         * all Java environments:&lt;/b&gt;<a name="line.679"></a>
<span class="sourceLineNo">680</span>         * &lt;p/&gt;<a name="line.680"></a>
<span class="sourceLineNo">681</span>         * The ability to reference a {@code Subject} and their server-side session<a name="line.681"></a>
<span class="sourceLineNo">682</span>         * &lt;em&gt;across clients of different mediums&lt;/em&gt; such as web applications, Java applets,<a name="line.682"></a>
<span class="sourceLineNo">683</span>         * standalone C# clients over XML-RPC and/or SOAP, and many others. This is a &lt;em&gt;huge&lt;/em&gt;<a name="line.683"></a>
<span class="sourceLineNo">684</span>         * benefit in heterogeneous enterprise applications.<a name="line.684"></a>
<span class="sourceLineNo">685</span>         * &lt;p/&gt;<a name="line.685"></a>
<span class="sourceLineNo">686</span>         * To maintain session integrity across client mediums, the {@code sessionId} &lt;b&gt;must&lt;/b&gt; be transmitted<a name="line.686"></a>
<span class="sourceLineNo">687</span>         * to all client mediums securely (e.g. over SSL) to prevent man-in-the-middle attacks.  This<a name="line.687"></a>
<span class="sourceLineNo">688</span>         * is nothing new - all web applications are susceptible to the same problem when transmitting<a name="line.688"></a>
<span class="sourceLineNo">689</span>         * {@code Cookie}s or when using URL rewriting.  As long as the<a name="line.689"></a>
<span class="sourceLineNo">690</span>         * {@code sessionId} is transmitted securely, session integrity can be maintained.<a name="line.690"></a>
<span class="sourceLineNo">691</span>         *<a name="line.691"></a>
<span class="sourceLineNo">692</span>         * @param sessionId the id of the session that backs the desired Subject being acquired.<a name="line.692"></a>
<span class="sourceLineNo">693</span>         * @return this {@code Builder} instance for method chaining.<a name="line.693"></a>
<span class="sourceLineNo">694</span>         */<a name="line.694"></a>
<span class="sourceLineNo">695</span>        public Builder sessionId(Serializable sessionId) {<a name="line.695"></a>
<span class="sourceLineNo">696</span>            if (sessionId != null) {<a name="line.696"></a>
<span class="sourceLineNo">697</span>                this.subjectContext.setSessionId(sessionId);<a name="line.697"></a>
<span class="sourceLineNo">698</span>            }<a name="line.698"></a>
<span class="sourceLineNo">699</span>            return this;<a name="line.699"></a>
<span class="sourceLineNo">700</span>        }<a name="line.700"></a>
<span class="sourceLineNo">701</span><a name="line.701"></a>
<span class="sourceLineNo">702</span>        /**<a name="line.702"></a>
<span class="sourceLineNo">703</span>         * Ensures the {@code Subject} being built will reflect the specified host name or IP as its originating<a name="line.703"></a>
<span class="sourceLineNo">704</span>         * location.<a name="line.704"></a>
<span class="sourceLineNo">705</span>         *<a name="line.705"></a>
<span class="sourceLineNo">706</span>         * @param host the host name or IP address to use as the {@code Subject}'s originating location.<a name="line.706"></a>
<span class="sourceLineNo">707</span>         * @return this {@code Builder} instance for method chaining.<a name="line.707"></a>
<span class="sourceLineNo">708</span>         */<a name="line.708"></a>
<span class="sourceLineNo">709</span>        public Builder host(String host) {<a name="line.709"></a>
<span class="sourceLineNo">710</span>            if (StringUtils.hasText(host)) {<a name="line.710"></a>
<span class="sourceLineNo">711</span>                this.subjectContext.setHost(host);<a name="line.711"></a>
<span class="sourceLineNo">712</span>            }<a name="line.712"></a>
<span class="sourceLineNo">713</span>            return this;<a name="line.713"></a>
<span class="sourceLineNo">714</span>        }<a name="line.714"></a>
<span class="sourceLineNo">715</span><a name="line.715"></a>
<span class="sourceLineNo">716</span>        /**<a name="line.716"></a>
<span class="sourceLineNo">717</span>         * Ensures the {@code Subject} being built will use the specified {@link Session} instance.  Note that it is<a name="line.717"></a>
<span class="sourceLineNo">718</span>         * more common to use the {@link #sessionId sessionId} builder method rather than having to construct a<a name="line.718"></a>
<span class="sourceLineNo">719</span>         * {@code Session} instance for this method.<a name="line.719"></a>
<span class="sourceLineNo">720</span>         *<a name="line.720"></a>
<span class="sourceLineNo">721</span>         * @param session the session to use as the {@code Subject}'s {@link Session}<a name="line.721"></a>
<span class="sourceLineNo">722</span>         * @return this {@code Builder} instance for method chaining.<a name="line.722"></a>
<span class="sourceLineNo">723</span>         */<a name="line.723"></a>
<span class="sourceLineNo">724</span>        public Builder session(Session session) {<a name="line.724"></a>
<span class="sourceLineNo">725</span>            if (session != null) {<a name="line.725"></a>
<span class="sourceLineNo">726</span>                this.subjectContext.setSession(session);<a name="line.726"></a>
<span class="sourceLineNo">727</span>            }<a name="line.727"></a>
<span class="sourceLineNo">728</span>            return this;<a name="line.728"></a>
<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
<span class="sourceLineNo">730</span><a name="line.730"></a>
<span class="sourceLineNo">731</span>        /**<a name="line.731"></a>
<span class="sourceLineNo">732</span>         * Ensures the {@code Subject} being built will reflect the specified principals (aka identity).<a name="line.732"></a>
<span class="sourceLineNo">733</span>         * &lt;p/&gt;<a name="line.733"></a>
<span class="sourceLineNo">734</span>         * For example, if your application's unique identifier for users is a {@code String} username, and you wanted<a name="line.734"></a>
<span class="sourceLineNo">735</span>         * to create a {@code Subject} instance that reflected a user whose username is<a name="line.735"></a>
<span class="sourceLineNo">736</span>         * '{@code jsmith}', and you knew the Realm that could acquire {@code jsmith}'s principals based on the username<a name="line.736"></a>
<span class="sourceLineNo">737</span>         * was named &amp;quot;{@code myRealm}&amp;quot;, you might create the '{@code jsmith} {@code Subject} instance this<a name="line.737"></a>
<span class="sourceLineNo">738</span>         * way:<a name="line.738"></a>
<span class="sourceLineNo">739</span>         * &lt;pre&gt;<a name="line.739"></a>
<span class="sourceLineNo">740</span>         * PrincipalCollection identity = new {@link org.apache.shiro.subject.SimplePrincipalCollection#SimplePrincipalCollection(Object, String) SimplePrincipalCollection}(&amp;quot;jsmith&amp;quot;, &amp;quot;myRealm&amp;quot;);<a name="line.740"></a>
<span class="sourceLineNo">741</span>         * Subject jsmith = new Subject.Builder().principals(identity).buildSubject();&lt;/pre&gt;<a name="line.741"></a>
<span class="sourceLineNo">742</span>         * &lt;p/&gt;<a name="line.742"></a>
<span class="sourceLineNo">743</span>         * Similarly, if your application's unique identifier for users is a {@code long} value (such as might be used<a name="line.743"></a>
<span class="sourceLineNo">744</span>         * as a primary key in a relational database) and you were using a {@code JDBC}<a name="line.744"></a>
<span class="sourceLineNo">745</span>         * {@code Realm} named, (unimaginatively) &amp;quot;jdbcRealm&amp;quot;, you might create the Subject<a name="line.745"></a>
<span class="sourceLineNo">746</span>         * instance this way:<a name="line.746"></a>
<span class="sourceLineNo">747</span>         * &lt;pre&gt;<a name="line.747"></a>
<span class="sourceLineNo">748</span>         * long userId = //get user ID from somewhere<a name="line.748"></a>
<span class="sourceLineNo">749</span>         * PrincipalCollection userIdentity = new {@link org.apache.shiro.subject.SimplePrincipalCollection#SimplePrincipalCollection(Object, String) SimplePrincipalCollection}(&lt;em&gt;userId&lt;/em&gt;, &amp;quot;jdbcRealm&amp;quot;);<a name="line.749"></a>
<span class="sourceLineNo">750</span>         * Subject user = new Subject.Builder().principals(identity).buildSubject();&lt;/pre&gt;<a name="line.750"></a>
<span class="sourceLineNo">751</span>         *<a name="line.751"></a>
<span class="sourceLineNo">752</span>         * @param principals the principals to use as the {@code Subject}'s identity.<a name="line.752"></a>
<span class="sourceLineNo">753</span>         * @return this {@code Builder} instance for method chaining.<a name="line.753"></a>
<span class="sourceLineNo">754</span>         */<a name="line.754"></a>
<span class="sourceLineNo">755</span>        public Builder principals(PrincipalCollection principals) {<a name="line.755"></a>
<span class="sourceLineNo">756</span>            if (principals != null &amp;&amp; !principals.isEmpty()) {<a name="line.756"></a>
<span class="sourceLineNo">757</span>                this.subjectContext.setPrincipals(principals);<a name="line.757"></a>
<span class="sourceLineNo">758</span>            }<a name="line.758"></a>
<span class="sourceLineNo">759</span>            return this;<a name="line.759"></a>
<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
<span class="sourceLineNo">761</span><a name="line.761"></a>
<span class="sourceLineNo">762</span>        /**<a name="line.762"></a>
<span class="sourceLineNo">763</span>         * Configures whether or not the created Subject instance can create a new {@code Session} if one does not<a name="line.763"></a>
<span class="sourceLineNo">764</span>         * already exist.  If set to {@code false}, any application calls to<a name="line.764"></a>
<span class="sourceLineNo">765</span>         * {@code subject.getSession()} or {@code subject.getSession(true))} will result in a SessionException.<a name="line.765"></a>
<span class="sourceLineNo">766</span>         * &lt;p/&gt;<a name="line.766"></a>
<span class="sourceLineNo">767</span>         * This setting is {@code true} by default, as most applications find value in sessions.<a name="line.767"></a>
<span class="sourceLineNo">768</span>         *<a name="line.768"></a>
<span class="sourceLineNo">769</span>         * @param enabled whether or not the created Subject instance can create a new {@code Session} if one does not<a name="line.769"></a>
<span class="sourceLineNo">770</span>         *                already exist.<a name="line.770"></a>
<span class="sourceLineNo">771</span>         * @return this {@code Builder} instance for method chaining.<a name="line.771"></a>
<span class="sourceLineNo">772</span>         * @since 1.2<a name="line.772"></a>
<span class="sourceLineNo">773</span>         */<a name="line.773"></a>
<span class="sourceLineNo">774</span>        public Builder sessionCreationEnabled(boolean enabled) {<a name="line.774"></a>
<span class="sourceLineNo">775</span>            this.subjectContext.setSessionCreationEnabled(enabled);<a name="line.775"></a>
<span class="sourceLineNo">776</span>            return this;<a name="line.776"></a>
<span class="sourceLineNo">777</span>        }<a name="line.777"></a>
<span class="sourceLineNo">778</span><a name="line.778"></a>
<span class="sourceLineNo">779</span>        /**<a name="line.779"></a>
<span class="sourceLineNo">780</span>         * Ensures the {@code Subject} being built will be considered<a name="line.780"></a>
<span class="sourceLineNo">781</span>         * {@link org.apache.shiro.subject.Subject#isAuthenticated() authenticated}.  Per the<a name="line.781"></a>
<span class="sourceLineNo">782</span>         * {@link org.apache.shiro.subject.Subject#isAuthenticated() isAuthenticated()} JavaDoc, be careful<a name="line.782"></a>
<span class="sourceLineNo">783</span>         * when specifying {@code true} - you should know what you are doing and have a good reason for ignoring Shiro's<a name="line.783"></a>
<span class="sourceLineNo">784</span>         * default authentication state mechanisms.<a name="line.784"></a>
<span class="sourceLineNo">785</span>         *<a name="line.785"></a>
<span class="sourceLineNo">786</span>         * @param authenticated whether or not the built {@code Subject} will be considered authenticated.<a name="line.786"></a>
<span class="sourceLineNo">787</span>         * @return this {@code Builder} instance for method chaining.<a name="line.787"></a>
<span class="sourceLineNo">788</span>         * @see org.apache.shiro.subject.Subject#isAuthenticated()<a name="line.788"></a>
<span class="sourceLineNo">789</span>         */<a name="line.789"></a>
<span class="sourceLineNo">790</span>        public Builder authenticated(boolean authenticated) {<a name="line.790"></a>
<span class="sourceLineNo">791</span>            this.subjectContext.setAuthenticated(authenticated);<a name="line.791"></a>
<span class="sourceLineNo">792</span>            return this;<a name="line.792"></a>
<span class="sourceLineNo">793</span>        }<a name="line.793"></a>
<span class="sourceLineNo">794</span><a name="line.794"></a>
<span class="sourceLineNo">795</span>        /**<a name="line.795"></a>
<span class="sourceLineNo">796</span>         * Allows custom attributes to be added to the underlying context {@code Map} used to construct the<a name="line.796"></a>
<span class="sourceLineNo">797</span>         * {@link Subject} instance.<a name="line.797"></a>
<span class="sourceLineNo">798</span>         * &lt;p/&gt;<a name="line.798"></a>
<span class="sourceLineNo">799</span>         * A {@code null} key throws an {@link IllegalArgumentException}. A {@code null} value effectively removes<a name="line.799"></a>
<span class="sourceLineNo">800</span>         * any previously stored attribute under the given key from the context map.<a name="line.800"></a>
<span class="sourceLineNo">801</span>         * &lt;p/&gt;<a name="line.801"></a>
<span class="sourceLineNo">802</span>         * &lt;b&gt;*NOTE*:&lt;/b&gt; This method is only useful when configuring Shiro with a custom {@link SubjectFactory}<a name="line.802"></a>
<span class="sourceLineNo">803</span>         * implementation.  This method allows end-users to append additional data to the context map which the<a name="line.803"></a>
<span class="sourceLineNo">804</span>         * {@code SubjectFactory} implementation can use when building custom Subject instances. As such, this method<a name="line.804"></a>
<span class="sourceLineNo">805</span>         * is only useful when a custom {@code SubjectFactory} implementation has been configured.<a name="line.805"></a>
<span class="sourceLineNo">806</span>         *<a name="line.806"></a>
<span class="sourceLineNo">807</span>         * @param attributeKey   the key under which the corresponding value will be stored in the context {@code Map}.<a name="line.807"></a>
<span class="sourceLineNo">808</span>         * @param attributeValue the value to store in the context map under the specified {@code attributeKey}.<a name="line.808"></a>
<span class="sourceLineNo">809</span>         * @return this {@code Builder} instance for method chaining.<a name="line.809"></a>
<span class="sourceLineNo">810</span>         * @throws IllegalArgumentException if the {@code attributeKey} is {@code null}.<a name="line.810"></a>
<span class="sourceLineNo">811</span>         * @see SubjectFactory#createSubject(SubjectContext)<a name="line.811"></a>
<span class="sourceLineNo">812</span>         */<a name="line.812"></a>
<span class="sourceLineNo">813</span>        public Builder contextAttribute(String attributeKey, Object attributeValue) {<a name="line.813"></a>
<span class="sourceLineNo">814</span>            if (attributeKey == null) {<a name="line.814"></a>
<span class="sourceLineNo">815</span>                String msg = "Subject context map key cannot be null.";<a name="line.815"></a>
<span class="sourceLineNo">816</span>                throw new IllegalArgumentException(msg);<a name="line.816"></a>
<span class="sourceLineNo">817</span>            }<a name="line.817"></a>
<span class="sourceLineNo">818</span>            if (attributeValue == null) {<a name="line.818"></a>
<span class="sourceLineNo">819</span>                this.subjectContext.remove(attributeKey);<a name="line.819"></a>
<span class="sourceLineNo">820</span>            } else {<a name="line.820"></a>
<span class="sourceLineNo">821</span>                this.subjectContext.put(attributeKey, attributeValue);<a name="line.821"></a>
<span class="sourceLineNo">822</span>            }<a name="line.822"></a>
<span class="sourceLineNo">823</span>            return this;<a name="line.823"></a>
<span class="sourceLineNo">824</span>        }<a name="line.824"></a>
<span class="sourceLineNo">825</span><a name="line.825"></a>
<span class="sourceLineNo">826</span>        /**<a name="line.826"></a>
<span class="sourceLineNo">827</span>         * Creates and returns a new {@code Subject} instance reflecting the cumulative state acquired by the<a name="line.827"></a>
<span class="sourceLineNo">828</span>         * other methods in this class.<a name="line.828"></a>
<span class="sourceLineNo">829</span>         * &lt;p/&gt;<a name="line.829"></a>
<span class="sourceLineNo">830</span>         * This {@code Builder} instance will still retain the underlying state after this method is called - it<a name="line.830"></a>
<span class="sourceLineNo">831</span>         * will not clear it; repeated calls to this method will return multiple {@link Subject} instances, all<a name="line.831"></a>
<span class="sourceLineNo">832</span>         * reflecting the exact same state.  If a new (different) {@code Subject} is to be constructed, a new<a name="line.832"></a>
<span class="sourceLineNo">833</span>         * {@code Builder} instance must be created.<a name="line.833"></a>
<span class="sourceLineNo">834</span>         * &lt;p/&gt;<a name="line.834"></a>
<span class="sourceLineNo">835</span>         * &lt;b&gt;Note&lt;/b&gt; that the returned {@code Subject} instance is &lt;b&gt;not&lt;/b&gt; automatically bound to the application<a name="line.835"></a>
<span class="sourceLineNo">836</span>         * (thread) for further use.  That is,<a name="line.836"></a>
<span class="sourceLineNo">837</span>         * {@link org.apache.shiro.SecurityUtils SecurityUtils}.{@link org.apache.shiro.SecurityUtils#getSubject() getSubject()}<a name="line.837"></a>
<span class="sourceLineNo">838</span>         * will not automatically return the same instance as what is returned by the builder.  It is up to the<a name="line.838"></a>
<span class="sourceLineNo">839</span>         * framework developer to bind the returned {@code Subject} for continued use if desired.<a name="line.839"></a>
<span class="sourceLineNo">840</span>         *<a name="line.840"></a>
<span class="sourceLineNo">841</span>         * @return a new {@code Subject} instance reflecting the cumulative state acquired by the<a name="line.841"></a>
<span class="sourceLineNo">842</span>         *         other methods in this class.<a name="line.842"></a>
<span class="sourceLineNo">843</span>         */<a name="line.843"></a>
<span class="sourceLineNo">844</span>        public Subject buildSubject() {<a name="line.844"></a>
<span class="sourceLineNo">845</span>            return this.securityManager.createSubject(this.subjectContext);<a name="line.845"></a>
<span class="sourceLineNo">846</span>        }<a name="line.846"></a>
<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
<span class="sourceLineNo">848</span><a name="line.848"></a>
<span class="sourceLineNo">849</span>}<a name="line.849"></a>




























































</pre>
</div>
</body>
</html>