<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.mgt.SecurityManager;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.subject.Subject;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.util.ThreadContext;</a>
<span class="sourceLineNo">024</span><a id="line.24"></a>
<span class="sourceLineNo">025</span><a id="line.25"></a>
<span class="sourceLineNo">026</span><a id="line.26">/**</a>
<span class="sourceLineNo">027</span><a id="line.27"> * Accesses the currently accessible {@code Subject} for the calling code depending on runtime environment.</a>
<span class="sourceLineNo">028</span><a id="line.28"> *</a>
<span class="sourceLineNo">029</span><a id="line.29"> * @since 0.2</a>
<span class="sourceLineNo">030</span><a id="line.30"> */</a>
<span class="sourceLineNo">031</span><a id="line.31">public abstract class SecurityUtils {</a>
<span class="sourceLineNo">032</span><a id="line.32"></a>
<span class="sourceLineNo">033</span><a id="line.33">    /**</a>
<span class="sourceLineNo">034</span><a id="line.34">     * ONLY used as a 'backup' in VM Singleton environments (that is, standalone environments), since the</a>
<span class="sourceLineNo">035</span><a id="line.35">     * ThreadContext should always be the primary source for Subject instances when possible.</a>
<span class="sourceLineNo">036</span><a id="line.36">     */</a>
<span class="sourceLineNo">037</span><a id="line.37">    private static volatile SecurityManager securityManager;</a>
<span class="sourceLineNo">038</span><a id="line.38"></a>
<span class="sourceLineNo">039</span><a id="line.39">    /**</a>
<span class="sourceLineNo">040</span><a id="line.40">     * Returns the currently accessible {@code Subject} available to the calling code depending on</a>
<span class="sourceLineNo">041</span><a id="line.41">     * runtime environment.</a>
<span class="sourceLineNo">042</span><a id="line.42">     * &lt;p/&gt;</a>
<span class="sourceLineNo">043</span><a id="line.43">     * This method is provided as a way of obtaining a {@code Subject} without having to resort to</a>
<span class="sourceLineNo">044</span><a id="line.44">     * implementation-specific methods.  It also allows the Shiro team to change the underlying implementation of</a>
<span class="sourceLineNo">045</span><a id="line.45">     * this method in the future depending on requirements/updates without affecting your code that uses it.</a>
<span class="sourceLineNo">046</span><a id="line.46">     *</a>
<span class="sourceLineNo">047</span><a id="line.47">     * @return the currently accessible {@code Subject} accessible to the calling code.</a>
<span class="sourceLineNo">048</span><a id="line.48">     * @throws IllegalStateException if no {@link Subject Subject} instance or</a>
<span class="sourceLineNo">049</span><a id="line.49">     *                               {@link SecurityManager SecurityManager} instance is available with which to obtain</a>
<span class="sourceLineNo">050</span><a id="line.50">     *                               a {@code Subject}, which which is considered an invalid application configuration</a>
<span class="sourceLineNo">051</span><a id="line.51">     *                               - a Subject should &lt;em&gt;always&lt;/em&gt; be available to the caller.</a>
<span class="sourceLineNo">052</span><a id="line.52">     */</a>
<span class="sourceLineNo">053</span><a id="line.53">    public static Subject getSubject() {</a>
<span class="sourceLineNo">054</span><a id="line.54">        Subject subject = ThreadContext.getSubject();</a>
<span class="sourceLineNo">055</span><a id="line.55">        if (subject == null) {</a>
<span class="sourceLineNo">056</span><a id="line.56">            subject = (new Subject.Builder()).buildSubject();</a>
<span class="sourceLineNo">057</span><a id="line.57">            ThreadContext.bind(subject);</a>
<span class="sourceLineNo">058</span><a id="line.58">        }</a>
<span class="sourceLineNo">059</span><a id="line.59">        return subject;</a>
<span class="sourceLineNo">060</span><a id="line.60">    }</a>
<span class="sourceLineNo">061</span><a id="line.61"></a>
<span class="sourceLineNo">062</span><a id="line.62">    /**</a>
<span class="sourceLineNo">063</span><a id="line.63">     * Sets a VM (static) singleton SecurityManager, specifically for transparent use in the</a>
<span class="sourceLineNo">064</span><a id="line.64">     * {@link #getSubject() getSubject()} implementation.</a>
<span class="sourceLineNo">065</span><a id="line.65">     * &lt;p/&gt;</a>
<span class="sourceLineNo">066</span><a id="line.66">     * &lt;b&gt;This method call exists mainly for framework development support.  Application developers should rarely,</a>
<span class="sourceLineNo">067</span><a id="line.67">     * if ever, need to call this method.&lt;/b&gt;</a>
<span class="sourceLineNo">068</span><a id="line.68">     * &lt;p/&gt;</a>
<span class="sourceLineNo">069</span><a id="line.69">     * The Shiro development team prefers that SecurityManager instances are non-static application singletons</a>
<span class="sourceLineNo">070</span><a id="line.70">     * and &lt;em&gt;not&lt;/em&gt; VM static singletons.  Application singletons that do not use static memory require some sort</a>
<span class="sourceLineNo">071</span><a id="line.71">     * of application configuration framework to maintain the application-wide SecurityManager instance for you</a>
<span class="sourceLineNo">072</span><a id="line.72">     * (for example, Spring or EJB3 environments) such that the object reference does not need to be static.</a>
<span class="sourceLineNo">073</span><a id="line.73">     * &lt;p/&gt;</a>
<span class="sourceLineNo">074</span><a id="line.74">     * In these environments, Shiro acquires Subject data based on the currently executing Thread via its own</a>
<span class="sourceLineNo">075</span><a id="line.75">     * framework integration code, and this is the preferred way to use Shiro.</a>
<span class="sourceLineNo">076</span><a id="line.76">     * &lt;p/&gt;</a>
<span class="sourceLineNo">077</span><a id="line.77">     * However in some environments, such as a standalone desktop application or Applets that do not use Spring or</a>
<span class="sourceLineNo">078</span><a id="line.78">     * EJB or similar config frameworks, a VM-singleton might make more sense (although the former is still preferred).</a>
<span class="sourceLineNo">079</span><a id="line.79">     * In these environments, setting the SecurityManager via this method will automatically enable the</a>
<span class="sourceLineNo">080</span><a id="line.80">     * {@link #getSubject() getSubject()} call to function with little configuration.</a>
<span class="sourceLineNo">081</span><a id="line.81">     * &lt;p/&gt;</a>
<span class="sourceLineNo">082</span><a id="line.82">     * For example, in these environments, this will work:</a>
<span class="sourceLineNo">083</span><a id="line.83">     * &lt;pre&gt;</a>
<span class="sourceLineNo">084</span><a id="line.84">     * DefaultSecurityManager securityManager = new {@link org.apache.shiro.mgt.DefaultSecurityManager DefaultSecurityManager}();</a>
<span class="sourceLineNo">085</span><a id="line.85">     * securityManager.setRealms( ... ); //one or more Realms</a>
<span class="sourceLineNo">086</span><a id="line.86">     * &lt;b&gt;SecurityUtils.setSecurityManager( securityManager );&lt;/b&gt;&lt;/pre&gt;</a>
<span class="sourceLineNo">087</span><a id="line.87">     * &lt;p/&gt;</a>
<span class="sourceLineNo">088</span><a id="line.88">     * And then anywhere in the application code, the following call will return the application's Subject:</a>
<span class="sourceLineNo">089</span><a id="line.89">     * &lt;pre&gt;</a>
<span class="sourceLineNo">090</span><a id="line.90">     * Subject currentUser = SecurityUtils.getSubject();&lt;/pre&gt;</a>
<span class="sourceLineNo">091</span><a id="line.91">     *</a>
<span class="sourceLineNo">092</span><a id="line.92">     * @param securityManager the securityManager instance to set as a VM static singleton.</a>
<span class="sourceLineNo">093</span><a id="line.93">     */</a>
<span class="sourceLineNo">094</span><a id="line.94">    public static void setSecurityManager(SecurityManager securityManager) {</a>
<span class="sourceLineNo">095</span><a id="line.95">        SecurityUtils.securityManager = securityManager;</a>
<span class="sourceLineNo">096</span><a id="line.96">    }</a>
<span class="sourceLineNo">097</span><a id="line.97"></a>
<span class="sourceLineNo">098</span><a id="line.98">    /**</a>
<span class="sourceLineNo">099</span><a id="line.99">     * Returns the SecurityManager accessible to the calling code.</a>
<span class="sourceLineNo">100</span><a id="line.100">     * &lt;p/&gt;</a>
<span class="sourceLineNo">101</span><a id="line.101">     * This implementation favors acquiring a thread-bound {@code SecurityManager} if it can find one.  If one is</a>
<span class="sourceLineNo">102</span><a id="line.102">     * not available to the executing thread, it will attempt to use the static singleton if available (see the</a>
<span class="sourceLineNo">103</span><a id="line.103">     * {@link #setSecurityManager setSecurityManager} method for more on the static singleton).</a>
<span class="sourceLineNo">104</span><a id="line.104">     * &lt;p/&gt;</a>
<span class="sourceLineNo">105</span><a id="line.105">     * If neither the thread-local or static singleton instances are available, this method throws an</a>
<span class="sourceLineNo">106</span><a id="line.106">     * {@code UnavailableSecurityManagerException} to indicate an error - a SecurityManager should always be accessible</a>
<span class="sourceLineNo">107</span><a id="line.107">     * to calling code in an application. If it is not, it is likely due to a Shiro configuration problem.</a>
<span class="sourceLineNo">108</span><a id="line.108">     *</a>
<span class="sourceLineNo">109</span><a id="line.109">     * @return the SecurityManager accessible to the calling code.</a>
<span class="sourceLineNo">110</span><a id="line.110">     * @throws UnavailableSecurityManagerException</a>
<span class="sourceLineNo">111</span><a id="line.111">     *          if there is no {@code SecurityManager} instance available to the</a>
<span class="sourceLineNo">112</span><a id="line.112">     *          calling code, which typically indicates an invalid application configuration.</a>
<span class="sourceLineNo">113</span><a id="line.113">     */</a>
<span class="sourceLineNo">114</span><a id="line.114">    public static SecurityManager getSecurityManager() throws UnavailableSecurityManagerException {</a>
<span class="sourceLineNo">115</span><a id="line.115">        SecurityManager securityManager = ThreadContext.getSecurityManager();</a>
<span class="sourceLineNo">116</span><a id="line.116">        if (securityManager == null) {</a>
<span class="sourceLineNo">117</span><a id="line.117">            securityManager = SecurityUtils.securityManager;</a>
<span class="sourceLineNo">118</span><a id="line.118">        }</a>
<span class="sourceLineNo">119</span><a id="line.119">        if (securityManager == null) {</a>
<span class="sourceLineNo">120</span><a id="line.120">            String msg = "No SecurityManager accessible to the calling code, either bound to the " +</a>
<span class="sourceLineNo">121</span><a id="line.121">                    ThreadContext.class.getName() + " or as a vm static singleton.  This is an invalid application " +</a>
<span class="sourceLineNo">122</span><a id="line.122">                    "configuration.";</a>
<span class="sourceLineNo">123</span><a id="line.123">            throw new UnavailableSecurityManagerException(msg);</a>
<span class="sourceLineNo">124</span><a id="line.124">        }</a>
<span class="sourceLineNo">125</span><a id="line.125">        return securityManager;</a>
<span class="sourceLineNo">126</span><a id="line.126">    }</a>
<span class="sourceLineNo">127</span><a id="line.127">}</a>




























































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