<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<FONT color="green">007</FONT>     * "License"); you may not use this file except in compliance<a name="line.7"></a>
<FONT color="green">008</FONT>     * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<FONT color="green">013</FONT>     * software distributed under the License is distributed on an<a name="line.13"></a>
<FONT color="green">014</FONT>     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<FONT color="green">015</FONT>     * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<FONT color="green">016</FONT>     * specific language governing permissions and limitations<a name="line.16"></a>
<FONT color="green">017</FONT>     * under the License.<a name="line.17"></a>
<FONT color="green">018</FONT>     */<a name="line.18"></a>
<FONT color="green">019</FONT>    package org.apache.shiro.util;<a name="line.19"></a>
<FONT color="green">020</FONT>    <a name="line.20"></a>
<FONT color="green">021</FONT>    import org.apache.shiro.mgt.SecurityManager;<a name="line.21"></a>
<FONT color="green">022</FONT>    import org.apache.shiro.subject.Subject;<a name="line.22"></a>
<FONT color="green">023</FONT>    import org.slf4j.Logger;<a name="line.23"></a>
<FONT color="green">024</FONT>    import org.slf4j.LoggerFactory;<a name="line.24"></a>
<FONT color="green">025</FONT>    <a name="line.25"></a>
<FONT color="green">026</FONT>    import java.util.HashMap;<a name="line.26"></a>
<FONT color="green">027</FONT>    import java.util.Map;<a name="line.27"></a>
<FONT color="green">028</FONT>    <a name="line.28"></a>
<FONT color="green">029</FONT>    <a name="line.29"></a>
<FONT color="green">030</FONT>    /**<a name="line.30"></a>
<FONT color="green">031</FONT>     * A ThreadContext provides a means of binding and unbinding objects to the<a name="line.31"></a>
<FONT color="green">032</FONT>     * current thread based on key/value pairs.<a name="line.32"></a>
<FONT color="green">033</FONT>     * &lt;p/&gt;<a name="line.33"></a>
<FONT color="green">034</FONT>     * &lt;p&gt;An internal {@link java.util.HashMap} is used to maintain the key/value pairs<a name="line.34"></a>
<FONT color="green">035</FONT>     * for each thread.&lt;/p&gt;<a name="line.35"></a>
<FONT color="green">036</FONT>     * &lt;p/&gt;<a name="line.36"></a>
<FONT color="green">037</FONT>     * &lt;p&gt;If the desired behavior is to ensure that bound data is not shared across<a name="line.37"></a>
<FONT color="green">038</FONT>     * threads in a pooled or reusable threaded environment, the application (or more likely a framework) must<a name="line.38"></a>
<FONT color="green">039</FONT>     * bind and remove any necessary values at the beginning and end of stack<a name="line.39"></a>
<FONT color="green">040</FONT>     * execution, respectively (i.e. individually explicitly or all via the &lt;tt&gt;clear&lt;/tt&gt; method).&lt;/p&gt;<a name="line.40"></a>
<FONT color="green">041</FONT>     *<a name="line.41"></a>
<FONT color="green">042</FONT>     * @see #remove()<a name="line.42"></a>
<FONT color="green">043</FONT>     * @since 0.1<a name="line.43"></a>
<FONT color="green">044</FONT>     */<a name="line.44"></a>
<FONT color="green">045</FONT>    public abstract class ThreadContext {<a name="line.45"></a>
<FONT color="green">046</FONT>    <a name="line.46"></a>
<FONT color="green">047</FONT>        /**<a name="line.47"></a>
<FONT color="green">048</FONT>         * Private internal log instance.<a name="line.48"></a>
<FONT color="green">049</FONT>         */<a name="line.49"></a>
<FONT color="green">050</FONT>        private static final Logger log = LoggerFactory.getLogger(ThreadContext.class);<a name="line.50"></a>
<FONT color="green">051</FONT>    <a name="line.51"></a>
<FONT color="green">052</FONT>        public static final String SECURITY_MANAGER_KEY = ThreadContext.class.getName() + "_SECURITY_MANAGER_KEY";<a name="line.52"></a>
<FONT color="green">053</FONT>        public static final String SUBJECT_KEY = ThreadContext.class.getName() + "_SUBJECT_KEY";<a name="line.53"></a>
<FONT color="green">054</FONT>    <a name="line.54"></a>
<FONT color="green">055</FONT>        private static final ThreadLocal&lt;Map&lt;Object, Object&gt;&gt; resources = new InheritableThreadLocalMap&lt;Map&lt;Object, Object&gt;&gt;();<a name="line.55"></a>
<FONT color="green">056</FONT>    <a name="line.56"></a>
<FONT color="green">057</FONT>        /**<a name="line.57"></a>
<FONT color="green">058</FONT>         * Default no-argument constructor.<a name="line.58"></a>
<FONT color="green">059</FONT>         */<a name="line.59"></a>
<FONT color="green">060</FONT>        protected ThreadContext() {<a name="line.60"></a>
<FONT color="green">061</FONT>        }<a name="line.61"></a>
<FONT color="green">062</FONT>    <a name="line.62"></a>
<FONT color="green">063</FONT>        /**<a name="line.63"></a>
<FONT color="green">064</FONT>         * Returns the ThreadLocal Map. This Map is used internally to bind objects<a name="line.64"></a>
<FONT color="green">065</FONT>         * to the current thread by storing each object under a unique key.<a name="line.65"></a>
<FONT color="green">066</FONT>         *<a name="line.66"></a>
<FONT color="green">067</FONT>         * @return the map of bound resources<a name="line.67"></a>
<FONT color="green">068</FONT>         */<a name="line.68"></a>
<FONT color="green">069</FONT>        public static Map&lt;Object, Object&gt; getResources() {<a name="line.69"></a>
<FONT color="green">070</FONT>            return resources != null ? new HashMap&lt;Object, Object&gt;(resources.get()) : null;<a name="line.70"></a>
<FONT color="green">071</FONT>        }<a name="line.71"></a>
<FONT color="green">072</FONT>    <a name="line.72"></a>
<FONT color="green">073</FONT>        /**<a name="line.73"></a>
<FONT color="green">074</FONT>         * Allows a caller to explicitly set the entire resource map.  This operation overwrites everything that existed<a name="line.74"></a>
<FONT color="green">075</FONT>         * previously in the ThreadContext - if you need to retain what was on the thread prior to calling this method,<a name="line.75"></a>
<FONT color="green">076</FONT>         * call the {@link #getResources()} method, which will give you the existing state.<a name="line.76"></a>
<FONT color="green">077</FONT>         *<a name="line.77"></a>
<FONT color="green">078</FONT>         * @param newResources the resources to replace the existing {@link #getResources() resources}.<a name="line.78"></a>
<FONT color="green">079</FONT>         * @since 1.0<a name="line.79"></a>
<FONT color="green">080</FONT>         */<a name="line.80"></a>
<FONT color="green">081</FONT>        public static void setResources(Map&lt;Object, Object&gt; newResources) {<a name="line.81"></a>
<FONT color="green">082</FONT>            if (CollectionUtils.isEmpty(newResources)) {<a name="line.82"></a>
<FONT color="green">083</FONT>                return;<a name="line.83"></a>
<FONT color="green">084</FONT>            }<a name="line.84"></a>
<FONT color="green">085</FONT>            resources.get().clear();<a name="line.85"></a>
<FONT color="green">086</FONT>            resources.get().putAll(newResources);<a name="line.86"></a>
<FONT color="green">087</FONT>        }<a name="line.87"></a>
<FONT color="green">088</FONT>    <a name="line.88"></a>
<FONT color="green">089</FONT>        /**<a name="line.89"></a>
<FONT color="green">090</FONT>         * Returns the value bound in the {@code ThreadContext} under the specified {@code key}, or {@code null} if there<a name="line.90"></a>
<FONT color="green">091</FONT>         * is no value for that {@code key}.<a name="line.91"></a>
<FONT color="green">092</FONT>         *<a name="line.92"></a>
<FONT color="green">093</FONT>         * @param key the map key to use to lookup the value<a name="line.93"></a>
<FONT color="green">094</FONT>         * @return the value bound in the {@code ThreadContext} under the specified {@code key}, or {@code null} if there<a name="line.94"></a>
<FONT color="green">095</FONT>         *         is no value for that {@code key}.<a name="line.95"></a>
<FONT color="green">096</FONT>         * @since 1.0<a name="line.96"></a>
<FONT color="green">097</FONT>         */<a name="line.97"></a>
<FONT color="green">098</FONT>        private static Object getValue(Object key) {<a name="line.98"></a>
<FONT color="green">099</FONT>            return resources.get().get(key);<a name="line.99"></a>
<FONT color="green">100</FONT>        }<a name="line.100"></a>
<FONT color="green">101</FONT>    <a name="line.101"></a>
<FONT color="green">102</FONT>        /**<a name="line.102"></a>
<FONT color="green">103</FONT>         * Returns the object for the specified &lt;code&gt;key&lt;/code&gt; that is bound to<a name="line.103"></a>
<FONT color="green">104</FONT>         * the current thread.<a name="line.104"></a>
<FONT color="green">105</FONT>         *<a name="line.105"></a>
<FONT color="green">106</FONT>         * @param key the key that identifies the value to return<a name="line.106"></a>
<FONT color="green">107</FONT>         * @return the object keyed by &lt;code&gt;key&lt;/code&gt; or &lt;code&gt;null&lt;/code&gt; if<a name="line.107"></a>
<FONT color="green">108</FONT>         *         no value exists for the specified &lt;code&gt;key&lt;/code&gt;<a name="line.108"></a>
<FONT color="green">109</FONT>         */<a name="line.109"></a>
<FONT color="green">110</FONT>        public static Object get(Object key) {<a name="line.110"></a>
<FONT color="green">111</FONT>            if (log.isTraceEnabled()) {<a name="line.111"></a>
<FONT color="green">112</FONT>                String msg = "get() - in thread [" + Thread.currentThread().getName() + "]";<a name="line.112"></a>
<FONT color="green">113</FONT>                log.trace(msg);<a name="line.113"></a>
<FONT color="green">114</FONT>            }<a name="line.114"></a>
<FONT color="green">115</FONT>    <a name="line.115"></a>
<FONT color="green">116</FONT>            Object value = getValue(key);<a name="line.116"></a>
<FONT color="green">117</FONT>            if ((value != null) &amp;&amp; log.isTraceEnabled()) {<a name="line.117"></a>
<FONT color="green">118</FONT>                String msg = "Retrieved value of type [" + value.getClass().getName() + "] for key [" +<a name="line.118"></a>
<FONT color="green">119</FONT>                        key + "] " + "bound to thread [" + Thread.currentThread().getName() + "]";<a name="line.119"></a>
<FONT color="green">120</FONT>                log.trace(msg);<a name="line.120"></a>
<FONT color="green">121</FONT>            }<a name="line.121"></a>
<FONT color="green">122</FONT>            return value;<a name="line.122"></a>
<FONT color="green">123</FONT>        }<a name="line.123"></a>
<FONT color="green">124</FONT>    <a name="line.124"></a>
<FONT color="green">125</FONT>        /**<a name="line.125"></a>
<FONT color="green">126</FONT>         * Binds &lt;tt&gt;value&lt;/tt&gt; for the given &lt;code&gt;key&lt;/code&gt; to the current thread.<a name="line.126"></a>
<FONT color="green">127</FONT>         * &lt;p/&gt;<a name="line.127"></a>
<FONT color="green">128</FONT>         * &lt;p&gt;A &lt;tt&gt;null&lt;/tt&gt; &lt;tt&gt;value&lt;/tt&gt; has the same effect as if &lt;tt&gt;remove&lt;/tt&gt; was called for the given<a name="line.128"></a>
<FONT color="green">129</FONT>         * &lt;tt&gt;key&lt;/tt&gt;, i.e.:<a name="line.129"></a>
<FONT color="green">130</FONT>         * &lt;p/&gt;<a name="line.130"></a>
<FONT color="green">131</FONT>         * &lt;pre&gt;<a name="line.131"></a>
<FONT color="green">132</FONT>         * if ( value == null ) {<a name="line.132"></a>
<FONT color="green">133</FONT>         *     remove( key );<a name="line.133"></a>
<FONT color="green">134</FONT>         * }&lt;/pre&gt;<a name="line.134"></a>
<FONT color="green">135</FONT>         *<a name="line.135"></a>
<FONT color="green">136</FONT>         * @param key   The key with which to identify the &lt;code&gt;value&lt;/code&gt;.<a name="line.136"></a>
<FONT color="green">137</FONT>         * @param value The value to bind to the thread.<a name="line.137"></a>
<FONT color="green">138</FONT>         * @throws IllegalArgumentException if the &lt;code&gt;key&lt;/code&gt; argument is &lt;tt&gt;null&lt;/tt&gt;.<a name="line.138"></a>
<FONT color="green">139</FONT>         */<a name="line.139"></a>
<FONT color="green">140</FONT>        public static void put(Object key, Object value) {<a name="line.140"></a>
<FONT color="green">141</FONT>            if (key == null) {<a name="line.141"></a>
<FONT color="green">142</FONT>                throw new IllegalArgumentException("key cannot be null");<a name="line.142"></a>
<FONT color="green">143</FONT>            }<a name="line.143"></a>
<FONT color="green">144</FONT>    <a name="line.144"></a>
<FONT color="green">145</FONT>            if (value == null) {<a name="line.145"></a>
<FONT color="green">146</FONT>                remove(key);<a name="line.146"></a>
<FONT color="green">147</FONT>                return;<a name="line.147"></a>
<FONT color="green">148</FONT>            }<a name="line.148"></a>
<FONT color="green">149</FONT>    <a name="line.149"></a>
<FONT color="green">150</FONT>            resources.get().put(key, value);<a name="line.150"></a>
<FONT color="green">151</FONT>    <a name="line.151"></a>
<FONT color="green">152</FONT>            if (log.isTraceEnabled()) {<a name="line.152"></a>
<FONT color="green">153</FONT>                String msg = "Bound value of type [" + value.getClass().getName() + "] for key [" +<a name="line.153"></a>
<FONT color="green">154</FONT>                        key + "] to thread " + "[" + Thread.currentThread().getName() + "]";<a name="line.154"></a>
<FONT color="green">155</FONT>                log.trace(msg);<a name="line.155"></a>
<FONT color="green">156</FONT>            }<a name="line.156"></a>
<FONT color="green">157</FONT>        }<a name="line.157"></a>
<FONT color="green">158</FONT>    <a name="line.158"></a>
<FONT color="green">159</FONT>        /**<a name="line.159"></a>
<FONT color="green">160</FONT>         * Unbinds the value for the given &lt;code&gt;key&lt;/code&gt; from the current<a name="line.160"></a>
<FONT color="green">161</FONT>         * thread.<a name="line.161"></a>
<FONT color="green">162</FONT>         *<a name="line.162"></a>
<FONT color="green">163</FONT>         * @param key The key identifying the value bound to the current thread.<a name="line.163"></a>
<FONT color="green">164</FONT>         * @return the object unbound or &lt;tt&gt;null&lt;/tt&gt; if there was nothing bound<a name="line.164"></a>
<FONT color="green">165</FONT>         *         under the specified &lt;tt&gt;key&lt;/tt&gt; name.<a name="line.165"></a>
<FONT color="green">166</FONT>         */<a name="line.166"></a>
<FONT color="green">167</FONT>        public static Object remove(Object key) {<a name="line.167"></a>
<FONT color="green">168</FONT>            Object value = resources.get().remove(key);<a name="line.168"></a>
<FONT color="green">169</FONT>    <a name="line.169"></a>
<FONT color="green">170</FONT>            if ((value != null) &amp;&amp; log.isTraceEnabled()) {<a name="line.170"></a>
<FONT color="green">171</FONT>                String msg = "Removed value of type [" + value.getClass().getName() + "] for key [" +<a name="line.171"></a>
<FONT color="green">172</FONT>                        key + "]" + "from thread [" + Thread.currentThread().getName() + "]";<a name="line.172"></a>
<FONT color="green">173</FONT>                log.trace(msg);<a name="line.173"></a>
<FONT color="green">174</FONT>            }<a name="line.174"></a>
<FONT color="green">175</FONT>    <a name="line.175"></a>
<FONT color="green">176</FONT>            return value;<a name="line.176"></a>
<FONT color="green">177</FONT>        }<a name="line.177"></a>
<FONT color="green">178</FONT>    <a name="line.178"></a>
<FONT color="green">179</FONT>        /**<a name="line.179"></a>
<FONT color="green">180</FONT>         * {@link ThreadLocal#remove Remove}s the underlying {@link ThreadLocal ThreadLocal} from the thread.<a name="line.180"></a>
<FONT color="green">181</FONT>         * &lt;p/&gt;<a name="line.181"></a>
<FONT color="green">182</FONT>         * This method is meant to be the final 'clean up' operation that is called at the end of thread execution to<a name="line.182"></a>
<FONT color="green">183</FONT>         * prevent thread corruption in pooled thread environments.<a name="line.183"></a>
<FONT color="green">184</FONT>         *<a name="line.184"></a>
<FONT color="green">185</FONT>         * @since 1.0<a name="line.185"></a>
<FONT color="green">186</FONT>         */<a name="line.186"></a>
<FONT color="green">187</FONT>        public static void remove() {<a name="line.187"></a>
<FONT color="green">188</FONT>            resources.remove();<a name="line.188"></a>
<FONT color="green">189</FONT>        }<a name="line.189"></a>
<FONT color="green">190</FONT>    <a name="line.190"></a>
<FONT color="green">191</FONT>        /**<a name="line.191"></a>
<FONT color="green">192</FONT>         * Convenience method that simplifies retrieval of the application's SecurityManager instance from the current<a name="line.192"></a>
<FONT color="green">193</FONT>         * thread. If there is no SecurityManager bound to the thread (probably because framework code did not bind it<a name="line.193"></a>
<FONT color="green">194</FONT>         * to the thread), this method returns &lt;tt&gt;null&lt;/tt&gt;.<a name="line.194"></a>
<FONT color="green">195</FONT>         * &lt;p/&gt;<a name="line.195"></a>
<FONT color="green">196</FONT>         * It is merely a convenient wrapper for the following:<a name="line.196"></a>
<FONT color="green">197</FONT>         * &lt;p/&gt;<a name="line.197"></a>
<FONT color="green">198</FONT>         * &lt;code&gt;return (SecurityManager)get( SECURITY_MANAGER_KEY );&lt;/code&gt;<a name="line.198"></a>
<FONT color="green">199</FONT>         * &lt;p/&gt;<a name="line.199"></a>
<FONT color="green">200</FONT>         * This method only returns the bound value if it exists - it does not remove it<a name="line.200"></a>
<FONT color="green">201</FONT>         * from the thread.  To remove it, one must call {@link #unbindSecurityManager() unbindSecurityManager()} instead.<a name="line.201"></a>
<FONT color="green">202</FONT>         *<a name="line.202"></a>
<FONT color="green">203</FONT>         * @return the Subject object bound to the thread, or &lt;tt&gt;null&lt;/tt&gt; if there isn't one bound.<a name="line.203"></a>
<FONT color="green">204</FONT>         * @since 0.9<a name="line.204"></a>
<FONT color="green">205</FONT>         */<a name="line.205"></a>
<FONT color="green">206</FONT>        public static SecurityManager getSecurityManager() {<a name="line.206"></a>
<FONT color="green">207</FONT>            return (SecurityManager) get(SECURITY_MANAGER_KEY);<a name="line.207"></a>
<FONT color="green">208</FONT>        }<a name="line.208"></a>
<FONT color="green">209</FONT>    <a name="line.209"></a>
<FONT color="green">210</FONT>    <a name="line.210"></a>
<FONT color="green">211</FONT>        /**<a name="line.211"></a>
<FONT color="green">212</FONT>         * Convenience method that simplifies binding the application's SecurityManager instance to the ThreadContext.<a name="line.212"></a>
<FONT color="green">213</FONT>         * &lt;p/&gt;<a name="line.213"></a>
<FONT color="green">214</FONT>         * &lt;p&gt;The method's existence is to help reduce casting in code and to simplify remembering of<a name="line.214"></a>
<FONT color="green">215</FONT>         * ThreadContext key names.  The implementation is simple in that, if the SecurityManager is not &lt;tt&gt;null&lt;/tt&gt;,<a name="line.215"></a>
<FONT color="green">216</FONT>         * it binds it to the thread, i.e.:<a name="line.216"></a>
<FONT color="green">217</FONT>         * &lt;p/&gt;<a name="line.217"></a>
<FONT color="green">218</FONT>         * &lt;pre&gt;<a name="line.218"></a>
<FONT color="green">219</FONT>         * if (securityManager != null) {<a name="line.219"></a>
<FONT color="green">220</FONT>         *     put( SECURITY_MANAGER_KEY, securityManager);<a name="line.220"></a>
<FONT color="green">221</FONT>         * }&lt;/pre&gt;<a name="line.221"></a>
<FONT color="green">222</FONT>         *<a name="line.222"></a>
<FONT color="green">223</FONT>         * @param securityManager the application's SecurityManager instance to bind to the thread.  If the argument is<a name="line.223"></a>
<FONT color="green">224</FONT>         *                        null, nothing will be done.<a name="line.224"></a>
<FONT color="green">225</FONT>         * @since 0.9<a name="line.225"></a>
<FONT color="green">226</FONT>         */<a name="line.226"></a>
<FONT color="green">227</FONT>        public static void bind(SecurityManager securityManager) {<a name="line.227"></a>
<FONT color="green">228</FONT>            if (securityManager != null) {<a name="line.228"></a>
<FONT color="green">229</FONT>                put(SECURITY_MANAGER_KEY, securityManager);<a name="line.229"></a>
<FONT color="green">230</FONT>            }<a name="line.230"></a>
<FONT color="green">231</FONT>        }<a name="line.231"></a>
<FONT color="green">232</FONT>    <a name="line.232"></a>
<FONT color="green">233</FONT>        /**<a name="line.233"></a>
<FONT color="green">234</FONT>         * Convenience method that simplifies removal of the application's SecurityManager instance from the thread.<a name="line.234"></a>
<FONT color="green">235</FONT>         * &lt;p/&gt;<a name="line.235"></a>
<FONT color="green">236</FONT>         * The implementation just helps reduce casting and remembering of the ThreadContext key name, i.e it is<a name="line.236"></a>
<FONT color="green">237</FONT>         * merely a conveient wrapper for the following:<a name="line.237"></a>
<FONT color="green">238</FONT>         * &lt;p/&gt;<a name="line.238"></a>
<FONT color="green">239</FONT>         * &lt;code&gt;return (SecurityManager)remove( SECURITY_MANAGER_KEY );&lt;/code&gt;<a name="line.239"></a>
<FONT color="green">240</FONT>         * &lt;p/&gt;<a name="line.240"></a>
<FONT color="green">241</FONT>         * If you wish to just retrieve the object from the thread without removing it (so it can be retrieved later<a name="line.241"></a>
<FONT color="green">242</FONT>         * during thread execution), use the {@link #getSecurityManager() getSecurityManager()} method instead.<a name="line.242"></a>
<FONT color="green">243</FONT>         *<a name="line.243"></a>
<FONT color="green">244</FONT>         * @return the application's SecurityManager instance previously bound to the thread, or &lt;tt&gt;null&lt;/tt&gt; if there<a name="line.244"></a>
<FONT color="green">245</FONT>         *         was none bound.<a name="line.245"></a>
<FONT color="green">246</FONT>         * @since 0.9<a name="line.246"></a>
<FONT color="green">247</FONT>         */<a name="line.247"></a>
<FONT color="green">248</FONT>        public static SecurityManager unbindSecurityManager() {<a name="line.248"></a>
<FONT color="green">249</FONT>            return (SecurityManager) remove(SECURITY_MANAGER_KEY);<a name="line.249"></a>
<FONT color="green">250</FONT>        }<a name="line.250"></a>
<FONT color="green">251</FONT>    <a name="line.251"></a>
<FONT color="green">252</FONT>        /**<a name="line.252"></a>
<FONT color="green">253</FONT>         * Convenience method that simplifies retrieval of a thread-bound Subject.  If there is no<a name="line.253"></a>
<FONT color="green">254</FONT>         * Subject bound to the thread, this method returns &lt;tt&gt;null&lt;/tt&gt;.  It is merely a convenient wrapper<a name="line.254"></a>
<FONT color="green">255</FONT>         * for the following:<a name="line.255"></a>
<FONT color="green">256</FONT>         * &lt;p/&gt;<a name="line.256"></a>
<FONT color="green">257</FONT>         * &lt;code&gt;return (Subject)get( SUBJECT_KEY );&lt;/code&gt;<a name="line.257"></a>
<FONT color="green">258</FONT>         * &lt;p/&gt;<a name="line.258"></a>
<FONT color="green">259</FONT>         * This method only returns the bound value if it exists - it does not remove it<a name="line.259"></a>
<FONT color="green">260</FONT>         * from the thread.  To remove it, one must call {@link #unbindSubject() unbindSubject()} instead.<a name="line.260"></a>
<FONT color="green">261</FONT>         *<a name="line.261"></a>
<FONT color="green">262</FONT>         * @return the Subject object bound to the thread, or &lt;tt&gt;null&lt;/tt&gt; if there isn't one bound.<a name="line.262"></a>
<FONT color="green">263</FONT>         * @since 0.2<a name="line.263"></a>
<FONT color="green">264</FONT>         */<a name="line.264"></a>
<FONT color="green">265</FONT>        public static Subject getSubject() {<a name="line.265"></a>
<FONT color="green">266</FONT>            return (Subject) get(SUBJECT_KEY);<a name="line.266"></a>
<FONT color="green">267</FONT>        }<a name="line.267"></a>
<FONT color="green">268</FONT>    <a name="line.268"></a>
<FONT color="green">269</FONT>    <a name="line.269"></a>
<FONT color="green">270</FONT>        /**<a name="line.270"></a>
<FONT color="green">271</FONT>         * Convenience method that simplifies binding a Subject to the ThreadContext.<a name="line.271"></a>
<FONT color="green">272</FONT>         * &lt;p/&gt;<a name="line.272"></a>
<FONT color="green">273</FONT>         * &lt;p&gt;The method's existence is to help reduce casting in your own code and to simplify remembering of<a name="line.273"></a>
<FONT color="green">274</FONT>         * ThreadContext key names.  The implementation is simple in that, if the Subject is not &lt;tt&gt;null&lt;/tt&gt;,<a name="line.274"></a>
<FONT color="green">275</FONT>         * it binds it to the thread, i.e.:<a name="line.275"></a>
<FONT color="green">276</FONT>         * &lt;p/&gt;<a name="line.276"></a>
<FONT color="green">277</FONT>         * &lt;pre&gt;<a name="line.277"></a>
<FONT color="green">278</FONT>         * if (subject != null) {<a name="line.278"></a>
<FONT color="green">279</FONT>         *     put( SUBJECT_KEY, subject );<a name="line.279"></a>
<FONT color="green">280</FONT>         * }&lt;/pre&gt;<a name="line.280"></a>
<FONT color="green">281</FONT>         *<a name="line.281"></a>
<FONT color="green">282</FONT>         * @param subject the Subject object to bind to the thread.  If the argument is null, nothing will be done.<a name="line.282"></a>
<FONT color="green">283</FONT>         * @since 0.2<a name="line.283"></a>
<FONT color="green">284</FONT>         */<a name="line.284"></a>
<FONT color="green">285</FONT>        public static void bind(Subject subject) {<a name="line.285"></a>
<FONT color="green">286</FONT>            if (subject != null) {<a name="line.286"></a>
<FONT color="green">287</FONT>                put(SUBJECT_KEY, subject);<a name="line.287"></a>
<FONT color="green">288</FONT>            }<a name="line.288"></a>
<FONT color="green">289</FONT>        }<a name="line.289"></a>
<FONT color="green">290</FONT>    <a name="line.290"></a>
<FONT color="green">291</FONT>        /**<a name="line.291"></a>
<FONT color="green">292</FONT>         * Convenience method that simplifies removal of a thread-local Subject from the thread.<a name="line.292"></a>
<FONT color="green">293</FONT>         * &lt;p/&gt;<a name="line.293"></a>
<FONT color="green">294</FONT>         * The implementation just helps reduce casting and remembering of the ThreadContext key name, i.e it is<a name="line.294"></a>
<FONT color="green">295</FONT>         * merely a conveient wrapper for the following:<a name="line.295"></a>
<FONT color="green">296</FONT>         * &lt;p/&gt;<a name="line.296"></a>
<FONT color="green">297</FONT>         * &lt;code&gt;return (Subject)remove( SUBJECT_KEY );&lt;/code&gt;<a name="line.297"></a>
<FONT color="green">298</FONT>         * &lt;p/&gt;<a name="line.298"></a>
<FONT color="green">299</FONT>         * If you wish to just retrieve the object from the thread without removing it (so it can be retrieved later during<a name="line.299"></a>
<FONT color="green">300</FONT>         * thread execution), you should use the {@link #getSubject() getSubject()} method for that purpose.<a name="line.300"></a>
<FONT color="green">301</FONT>         *<a name="line.301"></a>
<FONT color="green">302</FONT>         * @return the Subject object previously bound to the thread, or &lt;tt&gt;null&lt;/tt&gt; if there was none bound.<a name="line.302"></a>
<FONT color="green">303</FONT>         * @since 0.2<a name="line.303"></a>
<FONT color="green">304</FONT>         */<a name="line.304"></a>
<FONT color="green">305</FONT>        public static Subject unbindSubject() {<a name="line.305"></a>
<FONT color="green">306</FONT>            return (Subject) remove(SUBJECT_KEY);<a name="line.306"></a>
<FONT color="green">307</FONT>        }<a name="line.307"></a>
<FONT color="green">308</FONT>        <a name="line.308"></a>
<FONT color="green">309</FONT>        private static final class InheritableThreadLocalMap&lt;T extends Map&lt;Object, Object&gt;&gt; extends InheritableThreadLocal&lt;Map&lt;Object, Object&gt;&gt; {<a name="line.309"></a>
<FONT color="green">310</FONT>            protected Map&lt;Object, Object&gt; initialValue() {<a name="line.310"></a>
<FONT color="green">311</FONT>                return new HashMap&lt;Object, Object&gt;();<a name="line.311"></a>
<FONT color="green">312</FONT>            }<a name="line.312"></a>
<FONT color="green">313</FONT>    <a name="line.313"></a>
<FONT color="green">314</FONT>            /**<a name="line.314"></a>
<FONT color="green">315</FONT>             * This implementation was added to address a<a name="line.315"></a>
<FONT color="green">316</FONT>             * &lt;a href="http://jsecurity.markmail.org/search/?q=#query:+page:1+mid:xqi2yxurwmrpqrvj+state:results"&gt;<a name="line.316"></a>
<FONT color="green">317</FONT>             * user-reported issue&lt;/a&gt;.<a name="line.317"></a>
<FONT color="green">318</FONT>             * @param parentValue the parent value, a HashMap as defined in the {@link #initialValue()} method.<a name="line.318"></a>
<FONT color="green">319</FONT>             * @return the HashMap to be used by any parent-spawned child threads (a clone of the parent HashMap).<a name="line.319"></a>
<FONT color="green">320</FONT>             */<a name="line.320"></a>
<FONT color="green">321</FONT>            @SuppressWarnings({"unchecked"})<a name="line.321"></a>
<FONT color="green">322</FONT>            protected Map&lt;Object, Object&gt; childValue(Map&lt;Object, Object&gt; parentValue) {<a name="line.322"></a>
<FONT color="green">323</FONT>                if (parentValue != null) {<a name="line.323"></a>
<FONT color="green">324</FONT>                    return (Map&lt;Object, Object&gt;) ((HashMap&lt;Object, Object&gt;) parentValue).clone();<a name="line.324"></a>
<FONT color="green">325</FONT>                } else {<a name="line.325"></a>
<FONT color="green">326</FONT>                    return null;<a name="line.326"></a>
<FONT color="green">327</FONT>                }<a name="line.327"></a>
<FONT color="green">328</FONT>            }<a name="line.328"></a>
<FONT color="green">329</FONT>        }<a name="line.329"></a>
<FONT color="green">330</FONT>    }<a name="line.330"></a>
<FONT color="green">331</FONT>    <a name="line.331"></a>




























































</PRE>
</BODY>
</HTML>