<!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.web.env;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.config.ConfigurationException;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.config.ResourceConfigurable;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.util.ClassUtils;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.util.LifecycleUtils;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.shiro.util.UnknownClassException;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.slf4j.Logger;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">029</span><a id="line.29"></a>
<span class="sourceLineNo">030</span><a id="line.30">import javax.servlet.ServletContext;</a>
<span class="sourceLineNo">031</span><a id="line.31">import java.util.ArrayList;</a>
<span class="sourceLineNo">032</span><a id="line.32">import java.util.Iterator;</a>
<span class="sourceLineNo">033</span><a id="line.33">import java.util.List;</a>
<span class="sourceLineNo">034</span><a id="line.34">import java.util.ServiceLoader;</a>
<span class="sourceLineNo">035</span><a id="line.35"></a>
<span class="sourceLineNo">036</span><a id="line.36"></a>
<span class="sourceLineNo">037</span><a id="line.37">/**</a>
<span class="sourceLineNo">038</span><a id="line.38"> * An {@code EnvironmentLoader} is responsible for loading a web application's Shiro {@link WebEnvironment}</a>
<span class="sourceLineNo">039</span><a id="line.39"> * (which includes the web app's {@link org.apache.shiro.web.mgt.WebSecurityManager WebSecurityManager}) into the</a>
<span class="sourceLineNo">040</span><a id="line.40"> * {@code ServletContext} at application startup.</a>
<span class="sourceLineNo">041</span><a id="line.41"> * &lt;p/&gt;</a>
<span class="sourceLineNo">042</span><a id="line.42"> * In Shiro 1.1 and earlier, the Shiro ServletFilter was responsible for creating the {@code WebSecurityManager} and</a>
<span class="sourceLineNo">043</span><a id="line.43"> * any additional objects (security filters, etc).  However, any component not filtered by the Shiro Filter (such</a>
<span class="sourceLineNo">044</span><a id="line.44"> * as other context listeners) was not able to easily acquire the these objects to perform security operations.</a>
<span class="sourceLineNo">045</span><a id="line.45"> * &lt;p/&gt;</a>
<span class="sourceLineNo">046</span><a id="line.46"> * Due to this, in Shiro 1.2 and later, this {@code EnvironmentLoader} (or more likely, the</a>
<span class="sourceLineNo">047</span><a id="line.47"> * {@link EnvironmentLoaderListener} subclass) is the preferred mechanism to initialize</a>
<span class="sourceLineNo">048</span><a id="line.48"> * a Shiro environment.  The Shiro Filter, while still required for request filtering, will not perform this</a>
<span class="sourceLineNo">049</span><a id="line.49"> * initialization at startup if the {@code EnvironmentLoader} (or listener) runs first.</a>
<span class="sourceLineNo">050</span><a id="line.50"> * &lt;h2&gt;Usage&lt;/h2&gt;</a>
<span class="sourceLineNo">051</span><a id="line.51"> * This implementation will look for two servlet context {@code context-param}s in {@code web.xml}:</a>
<span class="sourceLineNo">052</span><a id="line.52"> * {@code shiroEnvironmentClass} and {@code shiroConfigLocations} that customize how the {@code WebEnvironment} instance</a>
<span class="sourceLineNo">053</span><a id="line.53"> * will be initialized.</a>
<span class="sourceLineNo">054</span><a id="line.54"> * &lt;h3&gt;shiroEnvironmentClass&lt;/h3&gt;</a>
<span class="sourceLineNo">055</span><a id="line.55"> * The {@code shiroEnvironmentClass} {@code context-param}, if it exists, allows you to specify the</a>
<span class="sourceLineNo">056</span><a id="line.56"> * fully-qualified implementation class name of the {@link WebEnvironment} to instantiate.  For example:</a>
<span class="sourceLineNo">057</span><a id="line.57"> * &lt;pre&gt;</a>
<span class="sourceLineNo">058</span><a id="line.58"> * &amp;lt;context-param&amp;gt;</a>
<span class="sourceLineNo">059</span><a id="line.59"> *     &amp;lt;param-name&amp;gt;shiroEnvironmentClass&amp;lt;/param-name&amp;gt;</a>
<span class="sourceLineNo">060</span><a id="line.60"> *     &amp;lt;param-value&amp;gt;com.foo.bar.shiro.MyWebEnvironment&amp;lt;/param-value&amp;gt;</a>
<span class="sourceLineNo">061</span><a id="line.61"> * &amp;lt;/context-param&amp;gt;</a>
<span class="sourceLineNo">062</span><a id="line.62"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">063</span><a id="line.63"> * If not specified, the default value is the {@link IniWebEnvironment} class, which assumes Shiro's default</a>
<span class="sourceLineNo">064</span><a id="line.64"> * &lt;a href="http://shiro.apache.org/configuration.html"&gt;INI configuration format&lt;/a&gt;</a>
<span class="sourceLineNo">065</span><a id="line.65"> * &lt;h3&gt;shiroConfigLocations&lt;/h3&gt;</a>
<span class="sourceLineNo">066</span><a id="line.66"> * The {@code shiroConfigLocations} {@code context-param}, if it exists, allows you to specify the config location(s)</a>
<span class="sourceLineNo">067</span><a id="line.67"> * (resource path(s)) that will be relayed to the instantiated {@link WebEnvironment}.  For example:</a>
<span class="sourceLineNo">068</span><a id="line.68"> * &lt;pre&gt;</a>
<span class="sourceLineNo">069</span><a id="line.69"> * &amp;lt;context-param&amp;gt;</a>
<span class="sourceLineNo">070</span><a id="line.70"> *     &amp;lt;param-name&amp;gt;shiroConfigLocations&amp;lt;/param-name&amp;gt;</a>
<span class="sourceLineNo">071</span><a id="line.71"> *     &amp;lt;param-value&amp;gt;/WEB-INF/someLocation/shiro.ini&amp;lt;/param-value&amp;gt;</a>
<span class="sourceLineNo">072</span><a id="line.72"> * &amp;lt;/context-param&amp;gt;</a>
<span class="sourceLineNo">073</span><a id="line.73"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">074</span><a id="line.74"> * The {@code WebEnvironment} implementation must implement the {@link ResourceConfigurable} interface if it is to</a>
<span class="sourceLineNo">075</span><a id="line.75"> * acquire the {@code shiroConfigLocations} value.</a>
<span class="sourceLineNo">076</span><a id="line.76"> * &lt;p/&gt;</a>
<span class="sourceLineNo">077</span><a id="line.77"> * If this {@code context-param} is not specified, the {@code WebEnvironment} instance determines default resource</a>
<span class="sourceLineNo">078</span><a id="line.78"> * lookup behavior.  For example, the {@link IniWebEnvironment} will check the following two locations for INI config</a>
<span class="sourceLineNo">079</span><a id="line.79"> * by default (in order):</a>
<span class="sourceLineNo">080</span><a id="line.80"> * &lt;ol&gt;</a>
<span class="sourceLineNo">081</span><a id="line.81"> * &lt;li&gt;/WEB-INF/shiro.ini&lt;/li&gt;</a>
<span class="sourceLineNo">082</span><a id="line.82"> * &lt;li&gt;classpath:shiro.ini&lt;/li&gt;</a>
<span class="sourceLineNo">083</span><a id="line.83"> * &lt;/ol&gt;</a>
<span class="sourceLineNo">084</span><a id="line.84"> * &lt;h2&gt;Web Security Enforcement&lt;/h2&gt;</a>
<span class="sourceLineNo">085</span><a id="line.85"> * Using this loader will only initialize Shiro's environment in a web application - it will not filter web requests or</a>
<span class="sourceLineNo">086</span><a id="line.86"> * perform web-specific security operations.  To do this, you must ensure that you have also configured the</a>
<span class="sourceLineNo">087</span><a id="line.87"> * {@link org.apache.shiro.web.servlet.ShiroFilter ShiroFilter} in {@code web.xml}.</a>
<span class="sourceLineNo">088</span><a id="line.88"> * &lt;p/&gt;</a>
<span class="sourceLineNo">089</span><a id="line.89"> * Finally, it should be noted that this implementation was based on ideas in Spring 3's</a>
<span class="sourceLineNo">090</span><a id="line.90"> * {@code org.springframework.web.context.ContextLoader} implementation - no need to reinvent the wheel for this common</a>
<span class="sourceLineNo">091</span><a id="line.91"> * behavior.</a>
<span class="sourceLineNo">092</span><a id="line.92"> *</a>
<span class="sourceLineNo">093</span><a id="line.93"> * @see EnvironmentLoaderListener</a>
<span class="sourceLineNo">094</span><a id="line.94"> * @see org.apache.shiro.web.servlet.ShiroFilter ShiroFilter</a>
<span class="sourceLineNo">095</span><a id="line.95"> * @since 1.2</a>
<span class="sourceLineNo">096</span><a id="line.96"> */</a>
<span class="sourceLineNo">097</span><a id="line.97">public class EnvironmentLoader {</a>
<span class="sourceLineNo">098</span><a id="line.98"></a>
<span class="sourceLineNo">099</span><a id="line.99">    /**</a>
<span class="sourceLineNo">100</span><a id="line.100">     * Servlet Context config param for specifying the {@link WebEnvironment} implementation class to use:</a>
<span class="sourceLineNo">101</span><a id="line.101">     * {@code shiroEnvironmentClass}</a>
<span class="sourceLineNo">102</span><a id="line.102">     */</a>
<span class="sourceLineNo">103</span><a id="line.103">    public static final String ENVIRONMENT_CLASS_PARAM = "shiroEnvironmentClass";</a>
<span class="sourceLineNo">104</span><a id="line.104"></a>
<span class="sourceLineNo">105</span><a id="line.105">    /**</a>
<span class="sourceLineNo">106</span><a id="line.106">     * Servlet Context config param for the resource path to use for configuring the {@link WebEnvironment} instance:</a>
<span class="sourceLineNo">107</span><a id="line.107">     * {@code shiroConfigLocations}</a>
<span class="sourceLineNo">108</span><a id="line.108">     */</a>
<span class="sourceLineNo">109</span><a id="line.109">    public static final String CONFIG_LOCATIONS_PARAM = "shiroConfigLocations";</a>
<span class="sourceLineNo">110</span><a id="line.110"></a>
<span class="sourceLineNo">111</span><a id="line.111">    public static final String ENVIRONMENT_ATTRIBUTE_KEY = EnvironmentLoader.class.getName() + ".ENVIRONMENT_ATTRIBUTE_KEY";</a>
<span class="sourceLineNo">112</span><a id="line.112"></a>
<span class="sourceLineNo">113</span><a id="line.113">    private static final Logger log = LoggerFactory.getLogger(EnvironmentLoader.class);</a>
<span class="sourceLineNo">114</span><a id="line.114"></a>
<span class="sourceLineNo">115</span><a id="line.115">    /**</a>
<span class="sourceLineNo">116</span><a id="line.116">     * Initializes Shiro's {@link WebEnvironment} instance for the specified {@code ServletContext} based on the</a>
<span class="sourceLineNo">117</span><a id="line.117">     * {@link #CONFIG_LOCATIONS_PARAM} value.</a>
<span class="sourceLineNo">118</span><a id="line.118">     *</a>
<span class="sourceLineNo">119</span><a id="line.119">     * @param servletContext current servlet context</a>
<span class="sourceLineNo">120</span><a id="line.120">     * @return the new Shiro {@code WebEnvironment} instance.</a>
<span class="sourceLineNo">121</span><a id="line.121">     * @throws IllegalStateException if an existing WebEnvironment has already been initialized and associated with</a>
<span class="sourceLineNo">122</span><a id="line.122">     *                               the specified {@code ServletContext}.</a>
<span class="sourceLineNo">123</span><a id="line.123">     */</a>
<span class="sourceLineNo">124</span><a id="line.124">    public WebEnvironment initEnvironment(ServletContext servletContext) throws IllegalStateException {</a>
<span class="sourceLineNo">125</span><a id="line.125"></a>
<span class="sourceLineNo">126</span><a id="line.126">        if (servletContext.getAttribute(ENVIRONMENT_ATTRIBUTE_KEY) != null) {</a>
<span class="sourceLineNo">127</span><a id="line.127">            String msg = "There is already a Shiro environment associated with the current ServletContext.  " +</a>
<span class="sourceLineNo">128</span><a id="line.128">                    "Check if you have multiple EnvironmentLoader* definitions in your web.xml!";</a>
<span class="sourceLineNo">129</span><a id="line.129">            throw new IllegalStateException(msg);</a>
<span class="sourceLineNo">130</span><a id="line.130">        }</a>
<span class="sourceLineNo">131</span><a id="line.131"></a>
<span class="sourceLineNo">132</span><a id="line.132">        servletContext.log("Initializing Shiro environment");</a>
<span class="sourceLineNo">133</span><a id="line.133">        log.info("Starting Shiro environment initialization.");</a>
<span class="sourceLineNo">134</span><a id="line.134"></a>
<span class="sourceLineNo">135</span><a id="line.135">        long startTime = System.currentTimeMillis();</a>
<span class="sourceLineNo">136</span><a id="line.136"></a>
<span class="sourceLineNo">137</span><a id="line.137">        try {</a>
<span class="sourceLineNo">138</span><a id="line.138"></a>
<span class="sourceLineNo">139</span><a id="line.139">            WebEnvironment environment = createEnvironment(servletContext);</a>
<span class="sourceLineNo">140</span><a id="line.140">            servletContext.setAttribute(ENVIRONMENT_ATTRIBUTE_KEY,environment);</a>
<span class="sourceLineNo">141</span><a id="line.141"></a>
<span class="sourceLineNo">142</span><a id="line.142">            log.debug("Published WebEnvironment as ServletContext attribute with name [{}]",</a>
<span class="sourceLineNo">143</span><a id="line.143">                    ENVIRONMENT_ATTRIBUTE_KEY);</a>
<span class="sourceLineNo">144</span><a id="line.144"></a>
<span class="sourceLineNo">145</span><a id="line.145">            if (log.isInfoEnabled()) {</a>
<span class="sourceLineNo">146</span><a id="line.146">                long elapsed = System.currentTimeMillis() - startTime;</a>
<span class="sourceLineNo">147</span><a id="line.147">                log.info("Shiro environment initialized in {} ms.", elapsed);</a>
<span class="sourceLineNo">148</span><a id="line.148">            }</a>
<span class="sourceLineNo">149</span><a id="line.149"></a>
<span class="sourceLineNo">150</span><a id="line.150">            return environment;</a>
<span class="sourceLineNo">151</span><a id="line.151">        } catch (RuntimeException ex) {</a>
<span class="sourceLineNo">152</span><a id="line.152">            log.error("Shiro environment initialization failed", ex);</a>
<span class="sourceLineNo">153</span><a id="line.153">            servletContext.setAttribute(ENVIRONMENT_ATTRIBUTE_KEY, ex);</a>
<span class="sourceLineNo">154</span><a id="line.154">            throw ex;</a>
<span class="sourceLineNo">155</span><a id="line.155">        } catch (Error err) {</a>
<span class="sourceLineNo">156</span><a id="line.156">            log.error("Shiro environment initialization failed", err);</a>
<span class="sourceLineNo">157</span><a id="line.157">            servletContext.setAttribute(ENVIRONMENT_ATTRIBUTE_KEY, err);</a>
<span class="sourceLineNo">158</span><a id="line.158">            throw err;</a>
<span class="sourceLineNo">159</span><a id="line.159">        }</a>
<span class="sourceLineNo">160</span><a id="line.160">    }</a>
<span class="sourceLineNo">161</span><a id="line.161"></a>
<span class="sourceLineNo">162</span><a id="line.162">    /**</a>
<span class="sourceLineNo">163</span><a id="line.163">     * Return the WebEnvironment implementation class to use, either the default</a>
<span class="sourceLineNo">164</span><a id="line.164">     * {@link IniWebEnvironment} or a custom class if specified.</a>
<span class="sourceLineNo">165</span><a id="line.165">     *</a>
<span class="sourceLineNo">166</span><a id="line.166">     * @param servletContext current servlet context</a>
<span class="sourceLineNo">167</span><a id="line.167">     * @return the WebEnvironment implementation class to use</a>
<span class="sourceLineNo">168</span><a id="line.168">     * @see #ENVIRONMENT_CLASS_PARAM</a>
<span class="sourceLineNo">169</span><a id="line.169">     * @see IniWebEnvironment</a>
<span class="sourceLineNo">170</span><a id="line.170">     * @see #determineWebEnvironment(ServletContext)</a>
<span class="sourceLineNo">171</span><a id="line.171">     * @see #getDefaultWebEnvironmentClass()</a>
<span class="sourceLineNo">172</span><a id="line.172">     * @deprecated This method is not longer used by Shiro, and will be removed in future versions,</a>
<span class="sourceLineNo">173</span><a id="line.173">     * use {@link #determineWebEnvironment(ServletContext)} or {@link #determineWebEnvironment(ServletContext)}</a>
<span class="sourceLineNo">174</span><a id="line.174">     */</a>
<span class="sourceLineNo">175</span><a id="line.175">    @Deprecated</a>
<span class="sourceLineNo">176</span><a id="line.176">    protected Class&lt;?&gt; determineWebEnvironmentClass(ServletContext servletContext) {</a>
<span class="sourceLineNo">177</span><a id="line.177">        Class&lt;? extends WebEnvironment&gt; webEnvironmentClass = webEnvironmentClassFromServletContext(servletContext);</a>
<span class="sourceLineNo">178</span><a id="line.178">        if( webEnvironmentClass != null) {</a>
<span class="sourceLineNo">179</span><a id="line.179">            return webEnvironmentClass;</a>
<span class="sourceLineNo">180</span><a id="line.180">        } else {</a>
<span class="sourceLineNo">181</span><a id="line.181"></a>
<span class="sourceLineNo">182</span><a id="line.182">            return getDefaultWebEnvironmentClass();</a>
<span class="sourceLineNo">183</span><a id="line.183">        }</a>
<span class="sourceLineNo">184</span><a id="line.184">    }</a>
<span class="sourceLineNo">185</span><a id="line.185"></a>
<span class="sourceLineNo">186</span><a id="line.186">    private Class&lt;? extends WebEnvironment&gt; webEnvironmentClassFromServletContext(ServletContext servletContext) {</a>
<span class="sourceLineNo">187</span><a id="line.187"></a>
<span class="sourceLineNo">188</span><a id="line.188">        Class&lt;? extends WebEnvironment&gt; webEnvironmentClass = null;</a>
<span class="sourceLineNo">189</span><a id="line.189">        String className = servletContext.getInitParameter(ENVIRONMENT_CLASS_PARAM);</a>
<span class="sourceLineNo">190</span><a id="line.190">        if (className != null) {</a>
<span class="sourceLineNo">191</span><a id="line.191">            try {</a>
<span class="sourceLineNo">192</span><a id="line.192">                webEnvironmentClass = ClassUtils.forName(className);</a>
<span class="sourceLineNo">193</span><a id="line.193">            } catch (UnknownClassException ex) {</a>
<span class="sourceLineNo">194</span><a id="line.194">                throw new ConfigurationException(</a>
<span class="sourceLineNo">195</span><a id="line.195">                        "Failed to load custom WebEnvironment class [" + className + "]", ex);</a>
<span class="sourceLineNo">196</span><a id="line.196">            }</a>
<span class="sourceLineNo">197</span><a id="line.197">        }</a>
<span class="sourceLineNo">198</span><a id="line.198">        return webEnvironmentClass;</a>
<span class="sourceLineNo">199</span><a id="line.199">    }</a>
<span class="sourceLineNo">200</span><a id="line.200"></a>
<span class="sourceLineNo">201</span><a id="line.201">    private WebEnvironment webEnvironmentFromServiceLoader() {</a>
<span class="sourceLineNo">202</span><a id="line.202"></a>
<span class="sourceLineNo">203</span><a id="line.203">        WebEnvironment webEnvironment = null;</a>
<span class="sourceLineNo">204</span><a id="line.204">        // try to load WebEnvironment as a service</a>
<span class="sourceLineNo">205</span><a id="line.205">        ServiceLoader&lt;WebEnvironment&gt; serviceLoader = ServiceLoader.load(WebEnvironment.class);</a>
<span class="sourceLineNo">206</span><a id="line.206">        Iterator&lt;WebEnvironment&gt; iterator = serviceLoader.iterator();</a>
<span class="sourceLineNo">207</span><a id="line.207"></a>
<span class="sourceLineNo">208</span><a id="line.208">        // Use the first one</a>
<span class="sourceLineNo">209</span><a id="line.209">        if (iterator.hasNext()) {</a>
<span class="sourceLineNo">210</span><a id="line.210">            webEnvironment = iterator.next();</a>
<span class="sourceLineNo">211</span><a id="line.211">        }</a>
<span class="sourceLineNo">212</span><a id="line.212">        // if there are others, throw an error</a>
<span class="sourceLineNo">213</span><a id="line.213">        if (iterator.hasNext()) {</a>
<span class="sourceLineNo">214</span><a id="line.214">            List&lt;String&gt; allWebEnvironments = new ArrayList&lt;String&gt;();</a>
<span class="sourceLineNo">215</span><a id="line.215">            allWebEnvironments.add(webEnvironment.getClass().getName());</a>
<span class="sourceLineNo">216</span><a id="line.216">            while (iterator.hasNext()) {</a>
<span class="sourceLineNo">217</span><a id="line.217">                allWebEnvironments.add(iterator.next().getClass().getName());</a>
<span class="sourceLineNo">218</span><a id="line.218">            }</a>
<span class="sourceLineNo">219</span><a id="line.219">            throw new ConfigurationException("ServiceLoader for class [" + WebEnvironment.class + "] returned more then one " +</a>
<span class="sourceLineNo">220</span><a id="line.220">                    "result.  ServiceLoader must return zero or exactly one result for this class. Select one using the " +</a>
<span class="sourceLineNo">221</span><a id="line.221">                    "servlet init parameter '"+ ENVIRONMENT_CLASS_PARAM +"'. Found: " + allWebEnvironments);</a>
<span class="sourceLineNo">222</span><a id="line.222">        }</a>
<span class="sourceLineNo">223</span><a id="line.223">        return webEnvironment;</a>
<span class="sourceLineNo">224</span><a id="line.224">    }</a>
<span class="sourceLineNo">225</span><a id="line.225"></a>
<span class="sourceLineNo">226</span><a id="line.226">    /**</a>
<span class="sourceLineNo">227</span><a id="line.227">     * Returns the default WebEnvironment class, which is unless overridden: {@link IniWebEnvironment}.</a>
<span class="sourceLineNo">228</span><a id="line.228">     * @return the default WebEnvironment class.</a>
<span class="sourceLineNo">229</span><a id="line.229">     */</a>
<span class="sourceLineNo">230</span><a id="line.230">    protected Class&lt;? extends WebEnvironment&gt; getDefaultWebEnvironmentClass() {</a>
<span class="sourceLineNo">231</span><a id="line.231">        return IniWebEnvironment.class;</a>
<span class="sourceLineNo">232</span><a id="line.232">    }</a>
<span class="sourceLineNo">233</span><a id="line.233"></a>
<span class="sourceLineNo">234</span><a id="line.234">    /**</a>
<span class="sourceLineNo">235</span><a id="line.235">     * Return the WebEnvironment implementation class to use, based on the order of:</a>
<span class="sourceLineNo">236</span><a id="line.236">     * &lt;ul&gt;</a>
<span class="sourceLineNo">237</span><a id="line.237">     *     &lt;li&gt;A custom WebEnvironment class - specified in the {@code servletContext} {@link #ENVIRONMENT_ATTRIBUTE_KEY} property&lt;/li&gt;</a>
<span class="sourceLineNo">238</span><a id="line.238">     *     &lt;li&gt;{@code ServiceLoader.load(WebEnvironment.class)} - (if more then one instance is found a {@link ConfigurationException} will be thrown&lt;/li&gt;</a>
<span class="sourceLineNo">239</span><a id="line.239">     *     &lt;li&gt;A call to {@link #getDefaultWebEnvironmentClass()} (default: {@link IniWebEnvironment})&lt;/li&gt;</a>
<span class="sourceLineNo">240</span><a id="line.240">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">241</span><a id="line.241">     *</a>
<span class="sourceLineNo">242</span><a id="line.242">     * @param servletContext current servlet context</a>
<span class="sourceLineNo">243</span><a id="line.243">     * @return the WebEnvironment implementation class to use</a>
<span class="sourceLineNo">244</span><a id="line.244">     * @see #ENVIRONMENT_CLASS_PARAM</a>
<span class="sourceLineNo">245</span><a id="line.245">     * @param servletContext the {@code servletContext} to query the {@code ENVIRONMENT_ATTRIBUTE_KEY} property from</a>
<span class="sourceLineNo">246</span><a id="line.246">     * @return the {@code WebEnvironment} to be used</a>
<span class="sourceLineNo">247</span><a id="line.247">     */</a>
<span class="sourceLineNo">248</span><a id="line.248">    protected WebEnvironment determineWebEnvironment(ServletContext servletContext) {</a>
<span class="sourceLineNo">249</span><a id="line.249"></a>
<span class="sourceLineNo">250</span><a id="line.250">        Class&lt;? extends WebEnvironment&gt; webEnvironmentClass = webEnvironmentClassFromServletContext(servletContext);</a>
<span class="sourceLineNo">251</span><a id="line.251">        WebEnvironment webEnvironment = null;</a>
<span class="sourceLineNo">252</span><a id="line.252"></a>
<span class="sourceLineNo">253</span><a id="line.253">        // try service loader next</a>
<span class="sourceLineNo">254</span><a id="line.254">        if (webEnvironmentClass == null) {</a>
<span class="sourceLineNo">255</span><a id="line.255">            webEnvironment = webEnvironmentFromServiceLoader();</a>
<span class="sourceLineNo">256</span><a id="line.256">        }</a>
<span class="sourceLineNo">257</span><a id="line.257"></a>
<span class="sourceLineNo">258</span><a id="line.258">        // if webEnvironment is not set, and ENVIRONMENT_CLASS_PARAM prop was not set, use the default</a>
<span class="sourceLineNo">259</span><a id="line.259">        if (webEnvironmentClass == null &amp;&amp; webEnvironment == null) {</a>
<span class="sourceLineNo">260</span><a id="line.260">            webEnvironmentClass = getDefaultWebEnvironmentClass();</a>
<span class="sourceLineNo">261</span><a id="line.261">        }</a>
<span class="sourceLineNo">262</span><a id="line.262"></a>
<span class="sourceLineNo">263</span><a id="line.263">        // at this point, we anything is set for the webEnvironmentClass, load it.</a>
<span class="sourceLineNo">264</span><a id="line.264">        if (webEnvironmentClass != null) {</a>
<span class="sourceLineNo">265</span><a id="line.265">            webEnvironment = (WebEnvironment) ClassUtils.newInstance(webEnvironmentClass);</a>
<span class="sourceLineNo">266</span><a id="line.266">        }</a>
<span class="sourceLineNo">267</span><a id="line.267"></a>
<span class="sourceLineNo">268</span><a id="line.268">        return webEnvironment;</a>
<span class="sourceLineNo">269</span><a id="line.269">    }</a>
<span class="sourceLineNo">270</span><a id="line.270"></a>
<span class="sourceLineNo">271</span><a id="line.271">    /**</a>
<span class="sourceLineNo">272</span><a id="line.272">     * Instantiates a {@link WebEnvironment} based on the specified ServletContext.</a>
<span class="sourceLineNo">273</span><a id="line.273">     * &lt;p/&gt;</a>
<span class="sourceLineNo">274</span><a id="line.274">     * This implementation {@link #determineWebEnvironmentClass(javax.servlet.ServletContext) determines} a</a>
<span class="sourceLineNo">275</span><a id="line.275">     * {@link WebEnvironment} implementation class to use.  That class is instantiated, configured, and returned.</a>
<span class="sourceLineNo">276</span><a id="line.276">     * &lt;p/&gt;</a>
<span class="sourceLineNo">277</span><a id="line.277">     * This allows custom {@code WebEnvironment} implementations to be specified via a ServletContext init-param if</a>
<span class="sourceLineNo">278</span><a id="line.278">     * desired.  If not specified, the default {@link IniWebEnvironment} implementation will be used.</a>
<span class="sourceLineNo">279</span><a id="line.279">     *</a>
<span class="sourceLineNo">280</span><a id="line.280">     * @param sc current servlet context</a>
<span class="sourceLineNo">281</span><a id="line.281">     * @return the constructed Shiro WebEnvironment instance</a>
<span class="sourceLineNo">282</span><a id="line.282">     * @see MutableWebEnvironment</a>
<span class="sourceLineNo">283</span><a id="line.283">     * @see ResourceConfigurable</a>
<span class="sourceLineNo">284</span><a id="line.284">     */</a>
<span class="sourceLineNo">285</span><a id="line.285">    protected WebEnvironment createEnvironment(ServletContext sc) {</a>
<span class="sourceLineNo">286</span><a id="line.286"></a>
<span class="sourceLineNo">287</span><a id="line.287">        WebEnvironment webEnvironment = determineWebEnvironment(sc);</a>
<span class="sourceLineNo">288</span><a id="line.288">        if (!MutableWebEnvironment.class.isInstance(webEnvironment)) {</a>
<span class="sourceLineNo">289</span><a id="line.289">            throw new ConfigurationException("Custom WebEnvironment class [" + webEnvironment.getClass().getName() +</a>
<span class="sourceLineNo">290</span><a id="line.290">                    "] is not of required type [" + MutableWebEnvironment.class.getName() + "]");</a>
<span class="sourceLineNo">291</span><a id="line.291">        }</a>
<span class="sourceLineNo">292</span><a id="line.292"></a>
<span class="sourceLineNo">293</span><a id="line.293">        String configLocations = sc.getInitParameter(CONFIG_LOCATIONS_PARAM);</a>
<span class="sourceLineNo">294</span><a id="line.294">        boolean configSpecified = StringUtils.hasText(configLocations);</a>
<span class="sourceLineNo">295</span><a id="line.295"></a>
<span class="sourceLineNo">296</span><a id="line.296">        if (configSpecified &amp;&amp; !(ResourceConfigurable.class.isInstance(webEnvironment))) {</a>
<span class="sourceLineNo">297</span><a id="line.297">            String msg = "WebEnvironment class [" + webEnvironment.getClass().getName() + "] does not implement the " +</a>
<span class="sourceLineNo">298</span><a id="line.298">                    ResourceConfigurable.class.getName() + "interface.  This is required to accept any " +</a>
<span class="sourceLineNo">299</span><a id="line.299">                    "configured " + CONFIG_LOCATIONS_PARAM + "value(s).";</a>
<span class="sourceLineNo">300</span><a id="line.300">            throw new ConfigurationException(msg);</a>
<span class="sourceLineNo">301</span><a id="line.301">        }</a>
<span class="sourceLineNo">302</span><a id="line.302"></a>
<span class="sourceLineNo">303</span><a id="line.303">        MutableWebEnvironment environment = (MutableWebEnvironment) webEnvironment;</a>
<span class="sourceLineNo">304</span><a id="line.304"></a>
<span class="sourceLineNo">305</span><a id="line.305">        environment.setServletContext(sc);</a>
<span class="sourceLineNo">306</span><a id="line.306"></a>
<span class="sourceLineNo">307</span><a id="line.307">        if (configSpecified &amp;&amp; (environment instanceof ResourceConfigurable)) {</a>
<span class="sourceLineNo">308</span><a id="line.308">            ((ResourceConfigurable) environment).setConfigLocations(configLocations);</a>
<span class="sourceLineNo">309</span><a id="line.309">        }</a>
<span class="sourceLineNo">310</span><a id="line.310"></a>
<span class="sourceLineNo">311</span><a id="line.311">        customizeEnvironment(environment);</a>
<span class="sourceLineNo">312</span><a id="line.312"></a>
<span class="sourceLineNo">313</span><a id="line.313">        LifecycleUtils.init(environment);</a>
<span class="sourceLineNo">314</span><a id="line.314"></a>
<span class="sourceLineNo">315</span><a id="line.315">        return environment;</a>
<span class="sourceLineNo">316</span><a id="line.316">    }</a>
<span class="sourceLineNo">317</span><a id="line.317"></a>
<span class="sourceLineNo">318</span><a id="line.318">    /**</a>
<span class="sourceLineNo">319</span><a id="line.319">     * Any additional customization of the Environment can be by overriding this method. For example setup shared</a>
<span class="sourceLineNo">320</span><a id="line.320">     * resources, etc. By default this method does nothing.</a>
<span class="sourceLineNo">321</span><a id="line.321">     * @param environment</a>
<span class="sourceLineNo">322</span><a id="line.322">     */</a>
<span class="sourceLineNo">323</span><a id="line.323">    protected void customizeEnvironment(WebEnvironment environment) {</a>
<span class="sourceLineNo">324</span><a id="line.324">    }</a>
<span class="sourceLineNo">325</span><a id="line.325"></a>
<span class="sourceLineNo">326</span><a id="line.326">    /**</a>
<span class="sourceLineNo">327</span><a id="line.327">     * Destroys the {@link WebEnvironment} for the given servlet context.</a>
<span class="sourceLineNo">328</span><a id="line.328">     *</a>
<span class="sourceLineNo">329</span><a id="line.329">     * @param servletContext the ServletContext attributed to the WebSecurityManager</a>
<span class="sourceLineNo">330</span><a id="line.330">     */</a>
<span class="sourceLineNo">331</span><a id="line.331">    public void destroyEnvironment(ServletContext servletContext) {</a>
<span class="sourceLineNo">332</span><a id="line.332">        servletContext.log("Cleaning up Shiro Environment");</a>
<span class="sourceLineNo">333</span><a id="line.333">        try {</a>
<span class="sourceLineNo">334</span><a id="line.334">            Object environment = servletContext.getAttribute(ENVIRONMENT_ATTRIBUTE_KEY);</a>
<span class="sourceLineNo">335</span><a id="line.335">            if (environment instanceof WebEnvironment) {</a>
<span class="sourceLineNo">336</span><a id="line.336">                finalizeEnvironment((WebEnvironment) environment);</a>
<span class="sourceLineNo">337</span><a id="line.337">            }</a>
<span class="sourceLineNo">338</span><a id="line.338">            LifecycleUtils.destroy(environment);</a>
<span class="sourceLineNo">339</span><a id="line.339">        } finally {</a>
<span class="sourceLineNo">340</span><a id="line.340">            servletContext.removeAttribute(ENVIRONMENT_ATTRIBUTE_KEY);</a>
<span class="sourceLineNo">341</span><a id="line.341">        }</a>
<span class="sourceLineNo">342</span><a id="line.342">    }</a>
<span class="sourceLineNo">343</span><a id="line.343"></a>
<span class="sourceLineNo">344</span><a id="line.344">    /**</a>
<span class="sourceLineNo">345</span><a id="line.345">     * Any additional cleanup of the Environment can be done by overriding this method.  For example clean up shared</a>
<span class="sourceLineNo">346</span><a id="line.346">     * resources, etc. By default this method does nothing.</a>
<span class="sourceLineNo">347</span><a id="line.347">     * @param environment</a>
<span class="sourceLineNo">348</span><a id="line.348">     * @since 1.3</a>
<span class="sourceLineNo">349</span><a id="line.349">     */</a>
<span class="sourceLineNo">350</span><a id="line.350">    protected void finalizeEnvironment(WebEnvironment environment) {</a>
<span class="sourceLineNo">351</span><a id="line.351">    }</a>
<span class="sourceLineNo">352</span><a id="line.352">}</a>




























































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