<!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.Ini;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.config.IniFactorySupport;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.io.ResourceUtils;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.util.*;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.shiro.web.config.IniFilterChainResolverFactory;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.apache.shiro.web.config.ShiroFilterConfiguration;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.apache.shiro.web.config.WebIniSecurityManagerFactory;</a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.shiro.web.filter.mgt.FilterChainResolver;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.apache.shiro.web.mgt.WebSecurityManager;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.apache.shiro.web.util.WebUtils;</a>
<span class="sourceLineNo">032</span><a id="line.32">import org.slf4j.Logger;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">034</span><a id="line.34"></a>
<span class="sourceLineNo">035</span><a id="line.35">import javax.servlet.ServletContext;</a>
<span class="sourceLineNo">036</span><a id="line.36">import java.io.IOException;</a>
<span class="sourceLineNo">037</span><a id="line.37">import java.io.InputStream;</a>
<span class="sourceLineNo">038</span><a id="line.38">import java.util.HashMap;</a>
<span class="sourceLineNo">039</span><a id="line.39">import java.util.Map;</a>
<span class="sourceLineNo">040</span><a id="line.40"></a>
<span class="sourceLineNo">041</span><a id="line.41">/**</a>
<span class="sourceLineNo">042</span><a id="line.42"> * {@link WebEnvironment} implementation configured by an {@link Ini} instance or {@code Ini} resource locations.</a>
<span class="sourceLineNo">043</span><a id="line.43"> *</a>
<span class="sourceLineNo">044</span><a id="line.44"> * @since 1.2</a>
<span class="sourceLineNo">045</span><a id="line.45"> */</a>
<span class="sourceLineNo">046</span><a id="line.46">public class IniWebEnvironment extends ResourceBasedWebEnvironment implements Initializable, Destroyable {</a>
<span class="sourceLineNo">047</span><a id="line.47"></a>
<span class="sourceLineNo">048</span><a id="line.48">    public static final String DEFAULT_WEB_INI_RESOURCE_PATH = "/WEB-INF/shiro.ini";</a>
<span class="sourceLineNo">049</span><a id="line.49">    public static final String FILTER_CHAIN_RESOLVER_NAME = "filterChainResolver";</a>
<span class="sourceLineNo">050</span><a id="line.50">    public static final String SHIRO_FILTER_CONFIG_NAME = "shiroFilter";</a>
<span class="sourceLineNo">051</span><a id="line.51"></a>
<span class="sourceLineNo">052</span><a id="line.52">    private static final Logger log = LoggerFactory.getLogger(IniWebEnvironment.class);</a>
<span class="sourceLineNo">053</span><a id="line.53"></a>
<span class="sourceLineNo">054</span><a id="line.54">    /**</a>
<span class="sourceLineNo">055</span><a id="line.55">     * The Ini that configures this WebEnvironment instance.</a>
<span class="sourceLineNo">056</span><a id="line.56">     */</a>
<span class="sourceLineNo">057</span><a id="line.57">    private Ini ini;</a>
<span class="sourceLineNo">058</span><a id="line.58"></a>
<span class="sourceLineNo">059</span><a id="line.59">    private WebIniSecurityManagerFactory factory;</a>
<span class="sourceLineNo">060</span><a id="line.60"></a>
<span class="sourceLineNo">061</span><a id="line.61">    public IniWebEnvironment() {</a>
<span class="sourceLineNo">062</span><a id="line.62">        factory = new WebIniSecurityManagerFactory();</a>
<span class="sourceLineNo">063</span><a id="line.63">    }</a>
<span class="sourceLineNo">064</span><a id="line.64"></a>
<span class="sourceLineNo">065</span><a id="line.65">    /**</a>
<span class="sourceLineNo">066</span><a id="line.66">     * Initializes this instance by resolving any potential (explicit or resource-configured) {@link Ini}</a>
<span class="sourceLineNo">067</span><a id="line.67">     * configuration and calling {@link #configure() configure} for actual instance configuration.</a>
<span class="sourceLineNo">068</span><a id="line.68">     */</a>
<span class="sourceLineNo">069</span><a id="line.69">    public void init() {</a>
<span class="sourceLineNo">070</span><a id="line.70"></a>
<span class="sourceLineNo">071</span><a id="line.71">        setIni(parseConfig());</a>
<span class="sourceLineNo">072</span><a id="line.72"></a>
<span class="sourceLineNo">073</span><a id="line.73">        configure();</a>
<span class="sourceLineNo">074</span><a id="line.74">    }</a>
<span class="sourceLineNo">075</span><a id="line.75"></a>
<span class="sourceLineNo">076</span><a id="line.76">    /**</a>
<span class="sourceLineNo">077</span><a id="line.77">     * Loads configuration {@link Ini} from {@link #getConfigLocations()} if set, otherwise falling back</a>
<span class="sourceLineNo">078</span><a id="line.78">     * to the {@link #getDefaultConfigLocations()}. Finally any Ini objects will be merged with the value returned</a>
<span class="sourceLineNo">079</span><a id="line.79">     * from {@link #getFrameworkIni()}</a>
<span class="sourceLineNo">080</span><a id="line.80">     * @return Ini configuration to be used by this Environment.</a>
<span class="sourceLineNo">081</span><a id="line.81">     * @since 1.4</a>
<span class="sourceLineNo">082</span><a id="line.82">     */</a>
<span class="sourceLineNo">083</span><a id="line.83">    protected Ini parseConfig() {</a>
<span class="sourceLineNo">084</span><a id="line.84">        Ini ini = getIni();</a>
<span class="sourceLineNo">085</span><a id="line.85"></a>
<span class="sourceLineNo">086</span><a id="line.86">        String[] configLocations = getConfigLocations();</a>
<span class="sourceLineNo">087</span><a id="line.87"></a>
<span class="sourceLineNo">088</span><a id="line.88">        if (log.isWarnEnabled() &amp;&amp; !CollectionUtils.isEmpty(ini) &amp;&amp;</a>
<span class="sourceLineNo">089</span><a id="line.89">                configLocations != null &amp;&amp; configLocations.length &gt; 0) {</a>
<span class="sourceLineNo">090</span><a id="line.90">            log.warn("Explicit INI instance has been provided, but configuration locations have also been " +</a>
<span class="sourceLineNo">091</span><a id="line.91">                    "specified.  The {} implementation does not currently support multiple Ini config, but this may " +</a>
<span class="sourceLineNo">092</span><a id="line.92">                    "be supported in the future. Only the INI instance will be used for configuration.",</a>
<span class="sourceLineNo">093</span><a id="line.93">                    IniWebEnvironment.class.getName());</a>
<span class="sourceLineNo">094</span><a id="line.94">        }</a>
<span class="sourceLineNo">095</span><a id="line.95"></a>
<span class="sourceLineNo">096</span><a id="line.96">        if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">097</span><a id="line.97">            log.debug("Checking any specified config locations.");</a>
<span class="sourceLineNo">098</span><a id="line.98">            ini = getSpecifiedIni(configLocations);</a>
<span class="sourceLineNo">099</span><a id="line.99">        }</a>
<span class="sourceLineNo">100</span><a id="line.100"></a>
<span class="sourceLineNo">101</span><a id="line.101">        if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">102</span><a id="line.102">            log.debug("No INI instance or config locations specified.  Trying default config locations.");</a>
<span class="sourceLineNo">103</span><a id="line.103">            ini = getDefaultIni();</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">        // Allow for integrations to provide default that will be merged other configuration.</a>
<span class="sourceLineNo">107</span><a id="line.107">        // to retain backwards compatibility this must be a different method then 'getDefaultIni()'</a>
<span class="sourceLineNo">108</span><a id="line.108">        ini = mergeIni(getFrameworkIni(), ini);</a>
<span class="sourceLineNo">109</span><a id="line.109"></a>
<span class="sourceLineNo">110</span><a id="line.110">        if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">111</span><a id="line.111">            String msg = "Shiro INI configuration was either not found or discovered to be empty/unconfigured.";</a>
<span class="sourceLineNo">112</span><a id="line.112">            throw new ConfigurationException(msg);</a>
<span class="sourceLineNo">113</span><a id="line.113">        }</a>
<span class="sourceLineNo">114</span><a id="line.114">        return ini;</a>
<span class="sourceLineNo">115</span><a id="line.115">    }</a>
<span class="sourceLineNo">116</span><a id="line.116"></a>
<span class="sourceLineNo">117</span><a id="line.117">    protected void configure() {</a>
<span class="sourceLineNo">118</span><a id="line.118"></a>
<span class="sourceLineNo">119</span><a id="line.119">        this.objects.clear();</a>
<span class="sourceLineNo">120</span><a id="line.120"></a>
<span class="sourceLineNo">121</span><a id="line.121">        WebSecurityManager securityManager = createWebSecurityManager();</a>
<span class="sourceLineNo">122</span><a id="line.122">        setWebSecurityManager(securityManager);</a>
<span class="sourceLineNo">123</span><a id="line.123"></a>
<span class="sourceLineNo">124</span><a id="line.124">        ShiroFilterConfiguration filterConfiguration = createFilterConfiguration();</a>
<span class="sourceLineNo">125</span><a id="line.125">        setShiroFilterConfiguration(filterConfiguration);</a>
<span class="sourceLineNo">126</span><a id="line.126"></a>
<span class="sourceLineNo">127</span><a id="line.127">        FilterChainResolver resolver = createFilterChainResolver();</a>
<span class="sourceLineNo">128</span><a id="line.128">        if (resolver != null) {</a>
<span class="sourceLineNo">129</span><a id="line.129">            setFilterChainResolver(resolver);</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"></a>
<span class="sourceLineNo">133</span><a id="line.133">    /**</a>
<span class="sourceLineNo">134</span><a id="line.134">     * Extension point to allow subclasses to provide an {@link Ini} configuration that will be merged into the</a>
<span class="sourceLineNo">135</span><a id="line.135">     * users configuration.  The users configuration will override anything set here.</a>
<span class="sourceLineNo">136</span><a id="line.136">     * &lt;p&gt;</a>
<span class="sourceLineNo">137</span><a id="line.137">     * &lt;strong&gt;NOTE:&lt;/strong&gt; Framework developers should use with caution. It is possible a user could provide</a>
<span class="sourceLineNo">138</span><a id="line.138">     * configuration that would conflict with the frameworks configuration.  For example: if this method returns an</a>
<span class="sourceLineNo">139</span><a id="line.139">     * Ini object with the following configuration:</a>
<span class="sourceLineNo">140</span><a id="line.140">     * &lt;pre&gt;&lt;code&gt;</a>
<span class="sourceLineNo">141</span><a id="line.141">     *     [main]</a>
<span class="sourceLineNo">142</span><a id="line.142">     *     realm = com.myco.FoobarRealm</a>
<span class="sourceLineNo">143</span><a id="line.143">     *     realm.foobarSpecificField = A string</a>
<span class="sourceLineNo">144</span><a id="line.144">     * &lt;/code&gt;&lt;/pre&gt;</a>
<span class="sourceLineNo">145</span><a id="line.145">     * And the user provides a similar configuration:</a>
<span class="sourceLineNo">146</span><a id="line.146">     * &lt;pre&gt;&lt;code&gt;</a>
<span class="sourceLineNo">147</span><a id="line.147">     *     [main]</a>
<span class="sourceLineNo">148</span><a id="line.148">     *     realm = net.differentco.MyCustomRealm</a>
<span class="sourceLineNo">149</span><a id="line.149">     * &lt;/code&gt;&lt;/pre&gt;</a>
<span class="sourceLineNo">150</span><a id="line.150">     *</a>
<span class="sourceLineNo">151</span><a id="line.151">     * This would merge into:</a>
<span class="sourceLineNo">152</span><a id="line.152">     * &lt;pre&gt;&lt;code&gt;</a>
<span class="sourceLineNo">153</span><a id="line.153">     *     [main]</a>
<span class="sourceLineNo">154</span><a id="line.154">     *     realm = net.differentco.MyCustomRealm</a>
<span class="sourceLineNo">155</span><a id="line.155">     *     realm.foobarSpecificField = A string</a>
<span class="sourceLineNo">156</span><a id="line.156">     * &lt;/code&gt;&lt;/pre&gt;</a>
<span class="sourceLineNo">157</span><a id="line.157">     *</a>
<span class="sourceLineNo">158</span><a id="line.158">     * This may cause a configuration error if &lt;code&gt;MyCustomRealm&lt;/code&gt; does not contain the field &lt;code&gt;foobarSpecificField&lt;/code&gt;.</a>
<span class="sourceLineNo">159</span><a id="line.159">     * This can be avoided if the Framework Ini uses more unique names, such as &lt;code&gt;foobarRealm&lt;/code&gt;. which would result</a>
<span class="sourceLineNo">160</span><a id="line.160">     * in a merged configuration that looks like:</a>
<span class="sourceLineNo">161</span><a id="line.161">     * &lt;pre&gt;&lt;code&gt;</a>
<span class="sourceLineNo">162</span><a id="line.162">     *     [main]</a>
<span class="sourceLineNo">163</span><a id="line.163">     *     foobarRealm = com.myco.FoobarRealm</a>
<span class="sourceLineNo">164</span><a id="line.164">     *     foobarRealm.foobarSpecificField = A string</a>
<span class="sourceLineNo">165</span><a id="line.165">     *     realm = net.differentco.MyCustomRealm</a>
<span class="sourceLineNo">166</span><a id="line.166">     * &lt;/code&gt;&lt;/pre&gt;</a>
<span class="sourceLineNo">167</span><a id="line.167">     *</a>
<span class="sourceLineNo">168</span><a id="line.168">     * &lt;/p&gt;</a>
<span class="sourceLineNo">169</span><a id="line.169">     *</a>
<span class="sourceLineNo">170</span><a id="line.170">     * @return Ini configuration used by the framework integrations.</a>
<span class="sourceLineNo">171</span><a id="line.171">     * @since 1.4</a>
<span class="sourceLineNo">172</span><a id="line.172">     */</a>
<span class="sourceLineNo">173</span><a id="line.173">    protected Ini getFrameworkIni() {</a>
<span class="sourceLineNo">174</span><a id="line.174">        return null;</a>
<span class="sourceLineNo">175</span><a id="line.175">    }</a>
<span class="sourceLineNo">176</span><a id="line.176"></a>
<span class="sourceLineNo">177</span><a id="line.177">    protected Ini getSpecifiedIni(String[] configLocations) throws ConfigurationException {</a>
<span class="sourceLineNo">178</span><a id="line.178"></a>
<span class="sourceLineNo">179</span><a id="line.179">        Ini ini = null;</a>
<span class="sourceLineNo">180</span><a id="line.180"></a>
<span class="sourceLineNo">181</span><a id="line.181">        if (configLocations != null &amp;&amp; configLocations.length &gt; 0) {</a>
<span class="sourceLineNo">182</span><a id="line.182"></a>
<span class="sourceLineNo">183</span><a id="line.183">            if (configLocations.length &gt; 1) {</a>
<span class="sourceLineNo">184</span><a id="line.184">                log.warn("More than one Shiro .ini config location has been specified.  Only the first will be " +</a>
<span class="sourceLineNo">185</span><a id="line.185">                        "used for configuration as the {} implementation does not currently support multiple " +</a>
<span class="sourceLineNo">186</span><a id="line.186">                        "files.  This may be supported in the future however.", IniWebEnvironment.class.getName());</a>
<span class="sourceLineNo">187</span><a id="line.187">            }</a>
<span class="sourceLineNo">188</span><a id="line.188"></a>
<span class="sourceLineNo">189</span><a id="line.189">            //required, as it is user specified:</a>
<span class="sourceLineNo">190</span><a id="line.190">            ini = createIni(configLocations[0], true);</a>
<span class="sourceLineNo">191</span><a id="line.191">        }</a>
<span class="sourceLineNo">192</span><a id="line.192"></a>
<span class="sourceLineNo">193</span><a id="line.193">        return ini;</a>
<span class="sourceLineNo">194</span><a id="line.194">    }</a>
<span class="sourceLineNo">195</span><a id="line.195"></a>
<span class="sourceLineNo">196</span><a id="line.196">    protected Ini mergeIni(Ini ini1, Ini ini2) {</a>
<span class="sourceLineNo">197</span><a id="line.197"></a>
<span class="sourceLineNo">198</span><a id="line.198">        if (ini1 == null) {</a>
<span class="sourceLineNo">199</span><a id="line.199">            return ini2;</a>
<span class="sourceLineNo">200</span><a id="line.200">        }</a>
<span class="sourceLineNo">201</span><a id="line.201"></a>
<span class="sourceLineNo">202</span><a id="line.202">        if (ini2 == null) {</a>
<span class="sourceLineNo">203</span><a id="line.203">            return ini1;</a>
<span class="sourceLineNo">204</span><a id="line.204">        }</a>
<span class="sourceLineNo">205</span><a id="line.205"></a>
<span class="sourceLineNo">206</span><a id="line.206">        // at this point we have two valid ini objects, create a new one and merge the contents of 2 into 1</a>
<span class="sourceLineNo">207</span><a id="line.207">        Ini iniResult = new Ini(ini1);</a>
<span class="sourceLineNo">208</span><a id="line.208">        iniResult.merge(ini2);</a>
<span class="sourceLineNo">209</span><a id="line.209"></a>
<span class="sourceLineNo">210</span><a id="line.210">        return iniResult;</a>
<span class="sourceLineNo">211</span><a id="line.211">    }</a>
<span class="sourceLineNo">212</span><a id="line.212"></a>
<span class="sourceLineNo">213</span><a id="line.213">    protected Ini getDefaultIni() {</a>
<span class="sourceLineNo">214</span><a id="line.214"></a>
<span class="sourceLineNo">215</span><a id="line.215">        Ini ini = null;</a>
<span class="sourceLineNo">216</span><a id="line.216"></a>
<span class="sourceLineNo">217</span><a id="line.217">        String[] configLocations = getDefaultConfigLocations();</a>
<span class="sourceLineNo">218</span><a id="line.218">        if (configLocations != null) {</a>
<span class="sourceLineNo">219</span><a id="line.219">            for (String location : configLocations) {</a>
<span class="sourceLineNo">220</span><a id="line.220">                ini = createIni(location, false);</a>
<span class="sourceLineNo">221</span><a id="line.221">                if (!CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">222</span><a id="line.222">                    log.debug("Discovered non-empty INI configuration at location '{}'.  Using for configuration.",</a>
<span class="sourceLineNo">223</span><a id="line.223">                            location);</a>
<span class="sourceLineNo">224</span><a id="line.224">                    break;</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">        }</a>
<span class="sourceLineNo">228</span><a id="line.228"></a>
<span class="sourceLineNo">229</span><a id="line.229">        return ini;</a>
<span class="sourceLineNo">230</span><a id="line.230">    }</a>
<span class="sourceLineNo">231</span><a id="line.231"></a>
<span class="sourceLineNo">232</span><a id="line.232">    /**</a>
<span class="sourceLineNo">233</span><a id="line.233">     * Creates an {@link Ini} instance reflecting the specified path, or {@code null} if the path does not exist and</a>
<span class="sourceLineNo">234</span><a id="line.234">     * is not required.</a>
<span class="sourceLineNo">235</span><a id="line.235">     * &lt;p/&gt;</a>
<span class="sourceLineNo">236</span><a id="line.236">     * If the path is required and does not exist or is empty, a {@link ConfigurationException} will be thrown.</a>
<span class="sourceLineNo">237</span><a id="line.237">     *</a>
<span class="sourceLineNo">238</span><a id="line.238">     * @param configLocation the resource path to load into an {@code Ini} instance.</a>
<span class="sourceLineNo">239</span><a id="line.239">     * @param required       if the path must exist and be converted to a non-empty {@link Ini} instance.</a>
<span class="sourceLineNo">240</span><a id="line.240">     * @return an {@link Ini} instance reflecting the specified path, or {@code null} if the path does not exist and</a>
<span class="sourceLineNo">241</span><a id="line.241">     *         is not required.</a>
<span class="sourceLineNo">242</span><a id="line.242">     * @throws ConfigurationException if the path is required but results in a null or empty Ini instance.</a>
<span class="sourceLineNo">243</span><a id="line.243">     */</a>
<span class="sourceLineNo">244</span><a id="line.244">    protected Ini createIni(String configLocation, boolean required) throws ConfigurationException {</a>
<span class="sourceLineNo">245</span><a id="line.245"></a>
<span class="sourceLineNo">246</span><a id="line.246">        Ini ini = null;</a>
<span class="sourceLineNo">247</span><a id="line.247"></a>
<span class="sourceLineNo">248</span><a id="line.248">        if (configLocation != null) {</a>
<span class="sourceLineNo">249</span><a id="line.249">            ini = convertPathToIni(configLocation, required);</a>
<span class="sourceLineNo">250</span><a id="line.250">        }</a>
<span class="sourceLineNo">251</span><a id="line.251">        if (required &amp;&amp; CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">252</span><a id="line.252">            String msg = "Required configuration location '" + configLocation + "' does not exist or did not " +</a>
<span class="sourceLineNo">253</span><a id="line.253">                    "contain any INI configuration.";</a>
<span class="sourceLineNo">254</span><a id="line.254">            throw new ConfigurationException(msg);</a>
<span class="sourceLineNo">255</span><a id="line.255">        }</a>
<span class="sourceLineNo">256</span><a id="line.256"></a>
<span class="sourceLineNo">257</span><a id="line.257">        return ini;</a>
<span class="sourceLineNo">258</span><a id="line.258">    }</a>
<span class="sourceLineNo">259</span><a id="line.259"></a>
<span class="sourceLineNo">260</span><a id="line.260"></a>
<span class="sourceLineNo">261</span><a id="line.261">    protected ShiroFilterConfiguration createFilterConfiguration() {</a>
<span class="sourceLineNo">262</span><a id="line.262">        return (ShiroFilterConfiguration) this.objects.get(SHIRO_FILTER_CONFIG_NAME);</a>
<span class="sourceLineNo">263</span><a id="line.263">    }</a>
<span class="sourceLineNo">264</span><a id="line.264"></a>
<span class="sourceLineNo">265</span><a id="line.265">    protected FilterChainResolver createFilterChainResolver() {</a>
<span class="sourceLineNo">266</span><a id="line.266"></a>
<span class="sourceLineNo">267</span><a id="line.267">        FilterChainResolver resolver = null;</a>
<span class="sourceLineNo">268</span><a id="line.268"></a>
<span class="sourceLineNo">269</span><a id="line.269">        Ini ini = getIni();</a>
<span class="sourceLineNo">270</span><a id="line.270"></a>
<span class="sourceLineNo">271</span><a id="line.271">        if (!CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">272</span><a id="line.272">            Factory&lt;FilterChainResolver&gt; factory = (Factory&lt;FilterChainResolver&gt;) this.objects.get(FILTER_CHAIN_RESOLVER_NAME);</a>
<span class="sourceLineNo">273</span><a id="line.273">            if (factory instanceof IniFactorySupport) {</a>
<span class="sourceLineNo">274</span><a id="line.274">                IniFactorySupport iniFactory = (IniFactorySupport) factory;</a>
<span class="sourceLineNo">275</span><a id="line.275">                iniFactory.setIni(ini);</a>
<span class="sourceLineNo">276</span><a id="line.276">                iniFactory.setDefaults(this.objects);</a>
<span class="sourceLineNo">277</span><a id="line.277">            }</a>
<span class="sourceLineNo">278</span><a id="line.278">            resolver = factory.getInstance();</a>
<span class="sourceLineNo">279</span><a id="line.279">        }</a>
<span class="sourceLineNo">280</span><a id="line.280"></a>
<span class="sourceLineNo">281</span><a id="line.281">        return resolver;</a>
<span class="sourceLineNo">282</span><a id="line.282">    }</a>
<span class="sourceLineNo">283</span><a id="line.283"></a>
<span class="sourceLineNo">284</span><a id="line.284">    protected WebSecurityManager createWebSecurityManager() {</a>
<span class="sourceLineNo">285</span><a id="line.285"></a>
<span class="sourceLineNo">286</span><a id="line.286">        Ini ini = getIni();</a>
<span class="sourceLineNo">287</span><a id="line.287">        if (!CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">288</span><a id="line.288">            factory.setIni(ini);</a>
<span class="sourceLineNo">289</span><a id="line.289">        }</a>
<span class="sourceLineNo">290</span><a id="line.290"></a>
<span class="sourceLineNo">291</span><a id="line.291">        Map&lt;String, Object&gt; defaults = getDefaults();</a>
<span class="sourceLineNo">292</span><a id="line.292">        if (!CollectionUtils.isEmpty(defaults)) {</a>
<span class="sourceLineNo">293</span><a id="line.293">            factory.setDefaults(defaults);</a>
<span class="sourceLineNo">294</span><a id="line.294">        }</a>
<span class="sourceLineNo">295</span><a id="line.295"></a>
<span class="sourceLineNo">296</span><a id="line.296">        WebSecurityManager wsm = (WebSecurityManager)factory.getInstance();</a>
<span class="sourceLineNo">297</span><a id="line.297"></a>
<span class="sourceLineNo">298</span><a id="line.298">        //SHIRO-306 - get beans after they've been created (the call was before the factory.getInstance() call,</a>
<span class="sourceLineNo">299</span><a id="line.299">        //which always returned null.</a>
<span class="sourceLineNo">300</span><a id="line.300">        Map&lt;String, ?&gt; beans = factory.getBeans();</a>
<span class="sourceLineNo">301</span><a id="line.301">        if (!CollectionUtils.isEmpty(beans)) {</a>
<span class="sourceLineNo">302</span><a id="line.302">            this.objects.putAll(beans);</a>
<span class="sourceLineNo">303</span><a id="line.303">        }</a>
<span class="sourceLineNo">304</span><a id="line.304"></a>
<span class="sourceLineNo">305</span><a id="line.305">        return wsm;</a>
<span class="sourceLineNo">306</span><a id="line.306">    }</a>
<span class="sourceLineNo">307</span><a id="line.307"></a>
<span class="sourceLineNo">308</span><a id="line.308">    /**</a>
<span class="sourceLineNo">309</span><a id="line.309">     * Returns an array with two elements, {@code /WEB-INF/shiro.ini} and {@code classpath:shiro.ini}.</a>
<span class="sourceLineNo">310</span><a id="line.310">     *</a>
<span class="sourceLineNo">311</span><a id="line.311">     * @return an array with two elements, {@code /WEB-INF/shiro.ini} and {@code classpath:shiro.ini}.</a>
<span class="sourceLineNo">312</span><a id="line.312">     */</a>
<span class="sourceLineNo">313</span><a id="line.313">    protected String[] getDefaultConfigLocations() {</a>
<span class="sourceLineNo">314</span><a id="line.314">        return new String[]{</a>
<span class="sourceLineNo">315</span><a id="line.315">                DEFAULT_WEB_INI_RESOURCE_PATH,</a>
<span class="sourceLineNo">316</span><a id="line.316">                IniFactorySupport.DEFAULT_INI_RESOURCE_PATH</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"></a>
<span class="sourceLineNo">320</span><a id="line.320">    /**</a>
<span class="sourceLineNo">321</span><a id="line.321">     * Converts the specified file path to an {@link Ini} instance.</a>
<span class="sourceLineNo">322</span><a id="line.322">     * &lt;p/&gt;</a>
<span class="sourceLineNo">323</span><a id="line.323">     * If the path does not have a resource prefix as defined by {@link org.apache.shiro.io.ResourceUtils#hasResourcePrefix(String)}, the</a>
<span class="sourceLineNo">324</span><a id="line.324">     * path is expected to be resolvable by the {@code ServletContext} via</a>
<span class="sourceLineNo">325</span><a id="line.325">     * {@link javax.servlet.ServletContext#getResourceAsStream(String)}.</a>
<span class="sourceLineNo">326</span><a id="line.326">     *</a>
<span class="sourceLineNo">327</span><a id="line.327">     * @param path     the path of the INI resource to load into an INI instance.</a>
<span class="sourceLineNo">328</span><a id="line.328">     * @param required if the specified path must exist</a>
<span class="sourceLineNo">329</span><a id="line.329">     * @return an INI instance populated based on the given INI resource path.</a>
<span class="sourceLineNo">330</span><a id="line.330">     */</a>
<span class="sourceLineNo">331</span><a id="line.331">    private Ini convertPathToIni(String path, boolean required) {</a>
<span class="sourceLineNo">332</span><a id="line.332"></a>
<span class="sourceLineNo">333</span><a id="line.333">        //TODO - this logic is ugly - it'd be ideal if we had a Resource API to polymorphically encaspulate this behavior</a>
<span class="sourceLineNo">334</span><a id="line.334"></a>
<span class="sourceLineNo">335</span><a id="line.335">        Ini ini = null;</a>
<span class="sourceLineNo">336</span><a id="line.336"></a>
<span class="sourceLineNo">337</span><a id="line.337">        if (StringUtils.hasText(path)) {</a>
<span class="sourceLineNo">338</span><a id="line.338">            InputStream is = null;</a>
<span class="sourceLineNo">339</span><a id="line.339"></a>
<span class="sourceLineNo">340</span><a id="line.340">            //SHIRO-178: Check for servlet context resource and not only resource paths:</a>
<span class="sourceLineNo">341</span><a id="line.341">            if (!ResourceUtils.hasResourcePrefix(path)) {</a>
<span class="sourceLineNo">342</span><a id="line.342">                is = getServletContextResourceStream(path);</a>
<span class="sourceLineNo">343</span><a id="line.343">            } else {</a>
<span class="sourceLineNo">344</span><a id="line.344">                try {</a>
<span class="sourceLineNo">345</span><a id="line.345">                    is = ResourceUtils.getInputStreamForPath(path);</a>
<span class="sourceLineNo">346</span><a id="line.346">                } catch (IOException e) {</a>
<span class="sourceLineNo">347</span><a id="line.347">                    if (required) {</a>
<span class="sourceLineNo">348</span><a id="line.348">                        throw new ConfigurationException(e);</a>
<span class="sourceLineNo">349</span><a id="line.349">                    } else {</a>
<span class="sourceLineNo">350</span><a id="line.350">                        if (log.isDebugEnabled()) {</a>
<span class="sourceLineNo">351</span><a id="line.351">                            log.debug("Unable to load optional path '" + path + "'.", e);</a>
<span class="sourceLineNo">352</span><a id="line.352">                        }</a>
<span class="sourceLineNo">353</span><a id="line.353">                    }</a>
<span class="sourceLineNo">354</span><a id="line.354">                }</a>
<span class="sourceLineNo">355</span><a id="line.355">            }</a>
<span class="sourceLineNo">356</span><a id="line.356">            if (is != null) {</a>
<span class="sourceLineNo">357</span><a id="line.357">                ini = new Ini();</a>
<span class="sourceLineNo">358</span><a id="line.358">                ini.load(is);</a>
<span class="sourceLineNo">359</span><a id="line.359">            } else {</a>
<span class="sourceLineNo">360</span><a id="line.360">                if (required) {</a>
<span class="sourceLineNo">361</span><a id="line.361">                    throw new ConfigurationException("Unable to load resource path '" + path + "'");</a>
<span class="sourceLineNo">362</span><a id="line.362">                }</a>
<span class="sourceLineNo">363</span><a id="line.363">            }</a>
<span class="sourceLineNo">364</span><a id="line.364">        }</a>
<span class="sourceLineNo">365</span><a id="line.365"></a>
<span class="sourceLineNo">366</span><a id="line.366">        return ini;</a>
<span class="sourceLineNo">367</span><a id="line.367">    }</a>
<span class="sourceLineNo">368</span><a id="line.368"></a>
<span class="sourceLineNo">369</span><a id="line.369">    //TODO - this logic is ugly - it'd be ideal if we had a Resource API to polymorphically encaspulate this behavior</a>
<span class="sourceLineNo">370</span><a id="line.370">    private InputStream getServletContextResourceStream(String path) {</a>
<span class="sourceLineNo">371</span><a id="line.371">        InputStream is = null;</a>
<span class="sourceLineNo">372</span><a id="line.372"></a>
<span class="sourceLineNo">373</span><a id="line.373">        path = WebUtils.normalize(path);</a>
<span class="sourceLineNo">374</span><a id="line.374">        ServletContext sc = getServletContext();</a>
<span class="sourceLineNo">375</span><a id="line.375">        if (sc != null) {</a>
<span class="sourceLineNo">376</span><a id="line.376">            is = sc.getResourceAsStream(path);</a>
<span class="sourceLineNo">377</span><a id="line.377">        }</a>
<span class="sourceLineNo">378</span><a id="line.378"></a>
<span class="sourceLineNo">379</span><a id="line.379">        return is;</a>
<span class="sourceLineNo">380</span><a id="line.380">    }</a>
<span class="sourceLineNo">381</span><a id="line.381"></a>
<span class="sourceLineNo">382</span><a id="line.382">    /**</a>
<span class="sourceLineNo">383</span><a id="line.383">     * Returns the {@code Ini} instance reflecting this WebEnvironment's configuration.</a>
<span class="sourceLineNo">384</span><a id="line.384">     *</a>
<span class="sourceLineNo">385</span><a id="line.385">     * @return the {@code Ini} instance reflecting this WebEnvironment's configuration.</a>
<span class="sourceLineNo">386</span><a id="line.386">     */</a>
<span class="sourceLineNo">387</span><a id="line.387">    public Ini getIni() {</a>
<span class="sourceLineNo">388</span><a id="line.388">        return this.ini;</a>
<span class="sourceLineNo">389</span><a id="line.389">    }</a>
<span class="sourceLineNo">390</span><a id="line.390"></a>
<span class="sourceLineNo">391</span><a id="line.391">    /**</a>
<span class="sourceLineNo">392</span><a id="line.392">     * Allows for configuration via a direct {@link Ini} instance instead of via</a>
<span class="sourceLineNo">393</span><a id="line.393">     * {@link #getConfigLocations() config locations}.</a>
<span class="sourceLineNo">394</span><a id="line.394">     * &lt;p/&gt;</a>
<span class="sourceLineNo">395</span><a id="line.395">     * If the specified instance is null or empty, the fallback/default resource-based configuration will be used.</a>
<span class="sourceLineNo">396</span><a id="line.396">     *</a>
<span class="sourceLineNo">397</span><a id="line.397">     * @param ini the ini instance to use for creation.</a>
<span class="sourceLineNo">398</span><a id="line.398">     */</a>
<span class="sourceLineNo">399</span><a id="line.399">    public void setIni(Ini ini) {</a>
<span class="sourceLineNo">400</span><a id="line.400">        this.ini = ini;</a>
<span class="sourceLineNo">401</span><a id="line.401">    }</a>
<span class="sourceLineNo">402</span><a id="line.402"></a>
<span class="sourceLineNo">403</span><a id="line.403">    protected Map&lt;String, Object&gt; getDefaults() {</a>
<span class="sourceLineNo">404</span><a id="line.404">        Map&lt;String, Object&gt; defaults = new HashMap&lt;String, Object&gt;();</a>
<span class="sourceLineNo">405</span><a id="line.405">        defaults.put(FILTER_CHAIN_RESOLVER_NAME, new IniFilterChainResolverFactory());</a>
<span class="sourceLineNo">406</span><a id="line.406">        defaults.put(SHIRO_FILTER_CONFIG_NAME, new ShiroFilterConfiguration());</a>
<span class="sourceLineNo">407</span><a id="line.407">        return defaults;</a>
<span class="sourceLineNo">408</span><a id="line.408">    }</a>
<span class="sourceLineNo">409</span><a id="line.409"></a>
<span class="sourceLineNo">410</span><a id="line.410">    /**</a>
<span class="sourceLineNo">411</span><a id="line.411">     * Returns the SecurityManager factory used by this WebEnvironment.</a>
<span class="sourceLineNo">412</span><a id="line.412">     *</a>
<span class="sourceLineNo">413</span><a id="line.413">     * @return the SecurityManager factory used by this WebEnvironment.</a>
<span class="sourceLineNo">414</span><a id="line.414">     * @since 1.4</a>
<span class="sourceLineNo">415</span><a id="line.415">     */</a>
<span class="sourceLineNo">416</span><a id="line.416">    @SuppressWarnings("unused")</a>
<span class="sourceLineNo">417</span><a id="line.417">    protected WebIniSecurityManagerFactory getSecurityManagerFactory() {</a>
<span class="sourceLineNo">418</span><a id="line.418">        return factory;</a>
<span class="sourceLineNo">419</span><a id="line.419">    }</a>
<span class="sourceLineNo">420</span><a id="line.420"></a>
<span class="sourceLineNo">421</span><a id="line.421">    /**</a>
<span class="sourceLineNo">422</span><a id="line.422">     * Allows for setting the SecurityManager factory which will be used to create the SecurityManager.</a>
<span class="sourceLineNo">423</span><a id="line.423">     *</a>
<span class="sourceLineNo">424</span><a id="line.424">     * @param factory the SecurityManager factory to used.</a>
<span class="sourceLineNo">425</span><a id="line.425">     * @since 1.4</a>
<span class="sourceLineNo">426</span><a id="line.426">     */</a>
<span class="sourceLineNo">427</span><a id="line.427">    protected void setSecurityManagerFactory(WebIniSecurityManagerFactory factory) {</a>
<span class="sourceLineNo">428</span><a id="line.428">        this.factory = factory;</a>
<span class="sourceLineNo">429</span><a id="line.429">    }</a>
<span class="sourceLineNo">430</span><a id="line.430">}</a>




























































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