<!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.servlet;</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.mgt.SecurityManager;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.shiro.util.CollectionUtils;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.apache.shiro.web.config.IniFilterChainResolverFactory;</a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.shiro.web.config.WebIniSecurityManagerFactory;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.apache.shiro.web.filter.mgt.FilterChainResolver;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.apache.shiro.web.mgt.WebSecurityManager;</a>
<span class="sourceLineNo">032</span><a id="line.32">import org.apache.shiro.web.util.WebUtils;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.slf4j.Logger;</a>
<span class="sourceLineNo">034</span><a id="line.34">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">035</span><a id="line.35"></a>
<span class="sourceLineNo">036</span><a id="line.36">import java.io.InputStream;</a>
<span class="sourceLineNo">037</span><a id="line.37">import java.util.Map;</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"> * &lt;h1&gt;Deprecated&lt;/h1&gt;</a>
<span class="sourceLineNo">041</span><a id="line.41"> * This filter has been deprecated as of Shiro 1.2 in favor of using the {@link ShiroFilter} in {@code web.xml} instead.</a>
<span class="sourceLineNo">042</span><a id="line.42"> * See the {@link ShiroFilter} JavaDoc for usage.</a>
<span class="sourceLineNo">043</span><a id="line.43"> * &lt;p/&gt;</a>
<span class="sourceLineNo">044</span><a id="line.44"> * ======================</a>
<span class="sourceLineNo">045</span><a id="line.45"> * &lt;p/&gt;</a>
<span class="sourceLineNo">046</span><a id="line.46"> * Servlet Filter that configures and enables all Shiro functions within a web application by using the</a>
<span class="sourceLineNo">047</span><a id="line.47"> * &lt;a href="http://en.wikipedia.org/wiki/INI_file"&gt;INI&lt;/a&gt; configuration format.</a>
<span class="sourceLineNo">048</span><a id="line.48"> * &lt;p/&gt;</a>
<span class="sourceLineNo">049</span><a id="line.49"> * The actual INI configuration contents are not covered here, but instead in Shiro's</a>
<span class="sourceLineNo">050</span><a id="line.50"> * &lt;a href="http://shiro.apache.org/configuration.html"&gt;Configuration Documentation&lt;/a&gt; and additional web-specific</a>
<span class="sourceLineNo">051</span><a id="line.51"> * &lt;a href="http://shiro.apache.org/web.html"&gt;Web Documentation&lt;/a&gt;.</a>
<span class="sourceLineNo">052</span><a id="line.52"> * &lt;h2&gt;Usage&lt;/h2&gt;</a>
<span class="sourceLineNo">053</span><a id="line.53"> * &lt;h3&gt;Default&lt;/h3&gt;</a>
<span class="sourceLineNo">054</span><a id="line.54"> * By default, the simplest filter declaration expects a {@code shiro.ini} resource to be located at</a>
<span class="sourceLineNo">055</span><a id="line.55"> * {@code /WEB-INF/shiro.ini}, or, if not there, falls back to checking the root of the classpath</a>
<span class="sourceLineNo">056</span><a id="line.56"> * (i.e. {@code classpath:shiro.ini}):</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;filter&amp;gt;</a>
<span class="sourceLineNo">059</span><a id="line.59"> *     &amp;lt;filter-name&amp;gt;ShiroFilter&amp;lt;/filter-name&amp;gt;</a>
<span class="sourceLineNo">060</span><a id="line.60"> *     &amp;lt;filter-class&amp;gt;org.apache.shiro.web.servlet.IniShiroFilter&amp;lt;/filter-class&amp;gt;</a>
<span class="sourceLineNo">061</span><a id="line.61"> * &amp;lt;/filter&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"> * &lt;h3&gt;Custom Path&lt;/h3&gt;</a>
<span class="sourceLineNo">064</span><a id="line.64"> * If you want the INI configuration to be somewhere other than {@code /WEB-INF/shiro.ini} or</a>
<span class="sourceLineNo">065</span><a id="line.65"> * {@code classpath:shiro.ini}, you may specify an alternate location via the {@code configPath init-param}:</a>
<span class="sourceLineNo">066</span><a id="line.66"> * &lt;pre&gt;</a>
<span class="sourceLineNo">067</span><a id="line.67"> * &amp;lt;filter&amp;gt;</a>
<span class="sourceLineNo">068</span><a id="line.68"> *     &amp;lt;filter-name&amp;gt;ShiroFilter&amp;lt;/filter-name&amp;gt;</a>
<span class="sourceLineNo">069</span><a id="line.69"> *     &amp;lt;filter-class&amp;gt;org.apache.shiro.web.servlet.IniShiroFilter&amp;lt;/filter-class&amp;gt;</a>
<span class="sourceLineNo">070</span><a id="line.70"> *     &amp;lt;init-param&amp;gt;</a>
<span class="sourceLineNo">071</span><a id="line.71"> *         &amp;lt;param-name&amp;gt;configPath&amp;lt;/param-name&amp;gt;</a>
<span class="sourceLineNo">072</span><a id="line.72"> *         &amp;lt;param-value&amp;gt;/WEB-INF/someFile.ini&amp;lt;/param-value&amp;gt;</a>
<span class="sourceLineNo">073</span><a id="line.73"> *     &amp;lt;/init-param&amp;gt;</a>
<span class="sourceLineNo">074</span><a id="line.74"> * &amp;lt;/filter&amp;gt;</a>
<span class="sourceLineNo">075</span><a id="line.75"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">076</span><a id="line.76"> * Unqualified (schemeless or 'non-prefixed') paths are assumed to be {@code ServletContext} resource paths, resolvable</a>
<span class="sourceLineNo">077</span><a id="line.77"> * via {@link javax.servlet.ServletContext#getResourceAsStream(String) ServletContext#getResourceAsStream}.</a>
<span class="sourceLineNo">078</span><a id="line.78"> * &lt;p/&gt;</a>
<span class="sourceLineNo">079</span><a id="line.79"> * Non-ServletContext resources may be loaded from qualified locations by specifying prefixes indicating the source,</a>
<span class="sourceLineNo">080</span><a id="line.80"> * e.g. {@code file:}, {@code url:}, and {@code classpath:}.  See the</a>
<span class="sourceLineNo">081</span><a id="line.81"> * {@link ResourceUtils#getInputStreamForPath(String)} JavaDoc for more.</a>
<span class="sourceLineNo">082</span><a id="line.82"> * &lt;h3&gt;Inline&lt;/h3&gt;</a>
<span class="sourceLineNo">083</span><a id="line.83"> * For relatively simple environments, you can embed the INI config directly inside the filter declaration with</a>
<span class="sourceLineNo">084</span><a id="line.84"> * the {@code config init-param}:</a>
<span class="sourceLineNo">085</span><a id="line.85"> * &lt;pre&gt;</a>
<span class="sourceLineNo">086</span><a id="line.86"> * &amp;lt;filter&amp;gt;</a>
<span class="sourceLineNo">087</span><a id="line.87"> *     &amp;lt;filter-name&amp;gt;ShiroFilter&amp;lt;/filter-name&amp;gt;</a>
<span class="sourceLineNo">088</span><a id="line.88"> *     &amp;lt;filter-class&amp;gt;org.apache.shiro.web.servlet.IniShiroFilter&amp;lt;/filter-class&amp;gt;</a>
<span class="sourceLineNo">089</span><a id="line.89"> *     &amp;lt;init-param&amp;gt;</a>
<span class="sourceLineNo">090</span><a id="line.90"> *         &amp;lt;param-name&amp;gt;config&amp;lt;/param-name&amp;gt;</a>
<span class="sourceLineNo">091</span><a id="line.91"> *         &amp;lt;param-value&amp;gt;</a>
<span class="sourceLineNo">092</span><a id="line.92"> *             #INI config goes here...</a>
<span class="sourceLineNo">093</span><a id="line.93"> *      &amp;lt;/param-value&amp;gt;</a>
<span class="sourceLineNo">094</span><a id="line.94"> *     &amp;lt;/init-param&amp;gt;</a>
<span class="sourceLineNo">095</span><a id="line.95"> * &amp;lt;/filter&amp;gt;</a>
<span class="sourceLineNo">096</span><a id="line.96"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">097</span><a id="line.97"> * Although this is typically not recommended because any Shiro configuration changes would contribute to version control</a>
<span class="sourceLineNo">098</span><a id="line.98"> * 'noise' in the web.xml file.</a>
<span class="sourceLineNo">099</span><a id="line.99"> * &lt;p/&gt;</a>
<span class="sourceLineNo">100</span><a id="line.100"> * When creating the shiro.ini configuration itself, please see Shiro's</a>
<span class="sourceLineNo">101</span><a id="line.101"> * &lt;a href="http://shiro.apache.org/configuration.html"&gt;Configuration Documentation&lt;/a&gt; and</a>
<span class="sourceLineNo">102</span><a id="line.102"> * &lt;a href="http://shiro.apache.org/web.html"&gt;Web Documentation&lt;/a&gt;.</a>
<span class="sourceLineNo">103</span><a id="line.103"> *</a>
<span class="sourceLineNo">104</span><a id="line.104"> * @see &lt;a href="http://shiro.apache.org/configuration.html"&gt;Apache Shiro INI Configuration&lt;/a&gt;</a>
<span class="sourceLineNo">105</span><a id="line.105"> * @see &lt;a href="http://shiro.apache.org/web.html"&gt;Apache Shiro Web Documentation&lt;/a&gt;</a>
<span class="sourceLineNo">106</span><a id="line.106"> * @since 1.0</a>
<span class="sourceLineNo">107</span><a id="line.107"> * @deprecated in 1.2 in favor of using the {@link ShiroFilter}</a>
<span class="sourceLineNo">108</span><a id="line.108"> */</a>
<span class="sourceLineNo">109</span><a id="line.109">@Deprecated</a>
<span class="sourceLineNo">110</span><a id="line.110">public class IniShiroFilter extends AbstractShiroFilter {</a>
<span class="sourceLineNo">111</span><a id="line.111"></a>
<span class="sourceLineNo">112</span><a id="line.112">    public static final String CONFIG_INIT_PARAM_NAME = "config";</a>
<span class="sourceLineNo">113</span><a id="line.113">    public static final String CONFIG_PATH_INIT_PARAM_NAME = "configPath";</a>
<span class="sourceLineNo">114</span><a id="line.114"></a>
<span class="sourceLineNo">115</span><a id="line.115">    public static final String DEFAULT_WEB_INI_RESOURCE_PATH = "/WEB-INF/shiro.ini";</a>
<span class="sourceLineNo">116</span><a id="line.116"></a>
<span class="sourceLineNo">117</span><a id="line.117">    private static final Logger log = LoggerFactory.getLogger(IniShiroFilter.class);</a>
<span class="sourceLineNo">118</span><a id="line.118"></a>
<span class="sourceLineNo">119</span><a id="line.119">    private String config;</a>
<span class="sourceLineNo">120</span><a id="line.120">    private String configPath;</a>
<span class="sourceLineNo">121</span><a id="line.121"></a>
<span class="sourceLineNo">122</span><a id="line.122">    public IniShiroFilter() {</a>
<span class="sourceLineNo">123</span><a id="line.123">    }</a>
<span class="sourceLineNo">124</span><a id="line.124"></a>
<span class="sourceLineNo">125</span><a id="line.125">    /**</a>
<span class="sourceLineNo">126</span><a id="line.126">     * Returns the actual INI configuration text to use to build the {@link SecurityManager} and</a>
<span class="sourceLineNo">127</span><a id="line.127">     * {@link FilterChainResolver} used by the web application or {@code null} if the</a>
<span class="sourceLineNo">128</span><a id="line.128">     * {@link #getConfigPath() configPath} should be used to load a fallback INI source.</a>
<span class="sourceLineNo">129</span><a id="line.129">     * &lt;p/&gt;</a>
<span class="sourceLineNo">130</span><a id="line.130">     * This value is {@code null} by default, but it will be automatically set to the value of the</a>
<span class="sourceLineNo">131</span><a id="line.131">     * '{@code config}' {@code init-param} if it exists in the {@code FilterConfig} provided by the servlet</a>
<span class="sourceLineNo">132</span><a id="line.132">     * container at startup.</a>
<span class="sourceLineNo">133</span><a id="line.133">     *</a>
<span class="sourceLineNo">134</span><a id="line.134">     * @return the actual INI configuration text to use to build the {@link SecurityManager} and</a>
<span class="sourceLineNo">135</span><a id="line.135">     *         {@link FilterChainResolver} used by the web application or {@code null} if the</a>
<span class="sourceLineNo">136</span><a id="line.136">     *         {@link #getConfigPath() configPath} should be used to load a fallback INI source.</a>
<span class="sourceLineNo">137</span><a id="line.137">     */</a>
<span class="sourceLineNo">138</span><a id="line.138">    public String getConfig() {</a>
<span class="sourceLineNo">139</span><a id="line.139">        return this.config;</a>
<span class="sourceLineNo">140</span><a id="line.140">    }</a>
<span class="sourceLineNo">141</span><a id="line.141"></a>
<span class="sourceLineNo">142</span><a id="line.142">    /**</a>
<span class="sourceLineNo">143</span><a id="line.143">     * Sets the actual INI configuration text to use to build the {@link SecurityManager} and</a>
<span class="sourceLineNo">144</span><a id="line.144">     * {@link FilterChainResolver} used by the web application.  If this value is {@code null}, the</a>
<span class="sourceLineNo">145</span><a id="line.145">     * {@link #getConfigPath() configPath} will be checked to see if a .ini file should be loaded instead.</a>
<span class="sourceLineNo">146</span><a id="line.146">     * &lt;p/&gt;</a>
<span class="sourceLineNo">147</span><a id="line.147">     * This value is {@code null} by default, but it will be automatically set to the value of the</a>
<span class="sourceLineNo">148</span><a id="line.148">     * '{@code config}' {@code init-param} if it exists in the {@code FilterConfig} provided by the servlet</a>
<span class="sourceLineNo">149</span><a id="line.149">     * container at startup.</a>
<span class="sourceLineNo">150</span><a id="line.150">     *</a>
<span class="sourceLineNo">151</span><a id="line.151">     * @param config the actual INI configuration text to use to build the {@link SecurityManager} and</a>
<span class="sourceLineNo">152</span><a id="line.152">     *               {@link FilterChainResolver} used by the web application.</a>
<span class="sourceLineNo">153</span><a id="line.153">     */</a>
<span class="sourceLineNo">154</span><a id="line.154">    public void setConfig(String config) {</a>
<span class="sourceLineNo">155</span><a id="line.155">        this.config = config;</a>
<span class="sourceLineNo">156</span><a id="line.156">    }</a>
<span class="sourceLineNo">157</span><a id="line.157"></a>
<span class="sourceLineNo">158</span><a id="line.158">    /**</a>
<span class="sourceLineNo">159</span><a id="line.159">     * Returns the config path to be used to load a .ini file for configuration if a configuration is</a>
<span class="sourceLineNo">160</span><a id="line.160">     * not specified via the {@link #getConfig() config} attribute.</a>
<span class="sourceLineNo">161</span><a id="line.161">     * &lt;p/&gt;</a>
<span class="sourceLineNo">162</span><a id="line.162">     * This value is {@code null} by default, but it will be automatically set to the value of the</a>
<span class="sourceLineNo">163</span><a id="line.163">     * '{@code configPath}' {@code init-param} if it exists in the {@code FilterConfig} provided by the servlet</a>
<span class="sourceLineNo">164</span><a id="line.164">     * container at startup.</a>
<span class="sourceLineNo">165</span><a id="line.165">     *</a>
<span class="sourceLineNo">166</span><a id="line.166">     * @return the config path to be used to load a .ini file for configuration if a configuration is</a>
<span class="sourceLineNo">167</span><a id="line.167">     *         not specified via the {@link #getConfig() config} attribute.</a>
<span class="sourceLineNo">168</span><a id="line.168">     */</a>
<span class="sourceLineNo">169</span><a id="line.169">    public String getConfigPath() {</a>
<span class="sourceLineNo">170</span><a id="line.170">        return configPath;</a>
<span class="sourceLineNo">171</span><a id="line.171">    }</a>
<span class="sourceLineNo">172</span><a id="line.172"></a>
<span class="sourceLineNo">173</span><a id="line.173">    /**</a>
<span class="sourceLineNo">174</span><a id="line.174">     * Sets the config path to be used to load a .ini file for configuration if a configuration is</a>
<span class="sourceLineNo">175</span><a id="line.175">     * not specified via the {@link #getConfig() config} attribute.</a>
<span class="sourceLineNo">176</span><a id="line.176">     * &lt;p/&gt;</a>
<span class="sourceLineNo">177</span><a id="line.177">     * This value is {@code null} by default, but it will be automatically set to the value of the</a>
<span class="sourceLineNo">178</span><a id="line.178">     * '{@code configPath}' {@code init-param} if it exists in the {@code FilterConfig} provided by the servlet</a>
<span class="sourceLineNo">179</span><a id="line.179">     * container at startup.</a>
<span class="sourceLineNo">180</span><a id="line.180">     *</a>
<span class="sourceLineNo">181</span><a id="line.181">     * @param configPath the config path to be used to load a .ini file for configuration if a configuration is</a>
<span class="sourceLineNo">182</span><a id="line.182">     *                   not specified via the {@link #getConfig() config} attribute.</a>
<span class="sourceLineNo">183</span><a id="line.183">     */</a>
<span class="sourceLineNo">184</span><a id="line.184">    public void setConfigPath(String configPath) {</a>
<span class="sourceLineNo">185</span><a id="line.185">        this.configPath = StringUtils.clean(configPath);</a>
<span class="sourceLineNo">186</span><a id="line.186">    }</a>
<span class="sourceLineNo">187</span><a id="line.187"></a>
<span class="sourceLineNo">188</span><a id="line.188">    public void init() throws Exception {</a>
<span class="sourceLineNo">189</span><a id="line.189">        applyInitParams();</a>
<span class="sourceLineNo">190</span><a id="line.190">        configure();</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">    protected void applyInitParams() throws Exception {</a>
<span class="sourceLineNo">194</span><a id="line.194">        String config = getInitParam(CONFIG_INIT_PARAM_NAME);</a>
<span class="sourceLineNo">195</span><a id="line.195">        if (config != null) {</a>
<span class="sourceLineNo">196</span><a id="line.196">            setConfig(config);</a>
<span class="sourceLineNo">197</span><a id="line.197">        }</a>
<span class="sourceLineNo">198</span><a id="line.198">        String configPath = getInitParam(CONFIG_PATH_INIT_PARAM_NAME);</a>
<span class="sourceLineNo">199</span><a id="line.199">        if (configPath != null) {</a>
<span class="sourceLineNo">200</span><a id="line.200">            setConfigPath(configPath);</a>
<span class="sourceLineNo">201</span><a id="line.201">        }</a>
<span class="sourceLineNo">202</span><a id="line.202">    }</a>
<span class="sourceLineNo">203</span><a id="line.203"></a>
<span class="sourceLineNo">204</span><a id="line.204">    protected void configure() throws Exception {</a>
<span class="sourceLineNo">205</span><a id="line.205">        Ini ini = loadIniFromConfig();</a>
<span class="sourceLineNo">206</span><a id="line.206"></a>
<span class="sourceLineNo">207</span><a id="line.207">        if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">208</span><a id="line.208">            log.info("Null or empty configuration specified via 'config' init-param.  " +</a>
<span class="sourceLineNo">209</span><a id="line.209">                    "Checking path-based configuration.");</a>
<span class="sourceLineNo">210</span><a id="line.210">            ini = loadIniFromPath();</a>
<span class="sourceLineNo">211</span><a id="line.211">        }</a>
<span class="sourceLineNo">212</span><a id="line.212">        //added for SHIRO-178:</a>
<span class="sourceLineNo">213</span><a id="line.213">        if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">214</span><a id="line.214">            log.info("Null or empty configuration specified via '" + CONFIG_INIT_PARAM_NAME + "' or '" +</a>
<span class="sourceLineNo">215</span><a id="line.215">                    CONFIG_PATH_INIT_PARAM_NAME + "' filter parameters.  Trying the default " +</a>
<span class="sourceLineNo">216</span><a id="line.216">                    DEFAULT_WEB_INI_RESOURCE_PATH + " file.");</a>
<span class="sourceLineNo">217</span><a id="line.217">            ini = getServletContextIniResource(DEFAULT_WEB_INI_RESOURCE_PATH);</a>
<span class="sourceLineNo">218</span><a id="line.218">        }</a>
<span class="sourceLineNo">219</span><a id="line.219">        //although the preferred default is /WEB-INF/shiro.ini per SHIRO-178, keep this</a>
<span class="sourceLineNo">220</span><a id="line.220">        //for backwards compatibility:</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.info("Null or empty configuration specified via '" + CONFIG_INIT_PARAM_NAME + "' or '" +</a>
<span class="sourceLineNo">223</span><a id="line.223">                    CONFIG_PATH_INIT_PARAM_NAME + "' filter parameters.  Trying the default " +</a>
<span class="sourceLineNo">224</span><a id="line.224">                    IniFactorySupport.DEFAULT_INI_RESOURCE_PATH + " file.");</a>
<span class="sourceLineNo">225</span><a id="line.225">            ini = IniFactorySupport.loadDefaultClassPathIni();</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">        Map&lt;String, ?&gt; objects = applySecurityManager(ini);</a>
<span class="sourceLineNo">229</span><a id="line.229">        applyFilterChainResolver(ini, objects);</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">    protected Ini loadIniFromConfig() {</a>
<span class="sourceLineNo">233</span><a id="line.233">        Ini ini = null;</a>
<span class="sourceLineNo">234</span><a id="line.234">        String config = getConfig();</a>
<span class="sourceLineNo">235</span><a id="line.235">        if (config != null) {</a>
<span class="sourceLineNo">236</span><a id="line.236">            ini = convertConfigToIni(config);</a>
<span class="sourceLineNo">237</span><a id="line.237">        }</a>
<span class="sourceLineNo">238</span><a id="line.238">        return ini;</a>
<span class="sourceLineNo">239</span><a id="line.239">    }</a>
<span class="sourceLineNo">240</span><a id="line.240"></a>
<span class="sourceLineNo">241</span><a id="line.241">    protected Ini loadIniFromPath() {</a>
<span class="sourceLineNo">242</span><a id="line.242">        Ini ini = null;</a>
<span class="sourceLineNo">243</span><a id="line.243">        String path = getConfigPath();</a>
<span class="sourceLineNo">244</span><a id="line.244">        if (path != null) {</a>
<span class="sourceLineNo">245</span><a id="line.245">            ini = convertPathToIni(path);</a>
<span class="sourceLineNo">246</span><a id="line.246">        }</a>
<span class="sourceLineNo">247</span><a id="line.247">        return ini;</a>
<span class="sourceLineNo">248</span><a id="line.248">    }</a>
<span class="sourceLineNo">249</span><a id="line.249"></a>
<span class="sourceLineNo">250</span><a id="line.250">    protected Map&lt;String, ?&gt; applySecurityManager(Ini ini) {</a>
<span class="sourceLineNo">251</span><a id="line.251">        WebIniSecurityManagerFactory factory;</a>
<span class="sourceLineNo">252</span><a id="line.252">        if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">253</span><a id="line.253">            factory = new WebIniSecurityManagerFactory();</a>
<span class="sourceLineNo">254</span><a id="line.254">        } else {</a>
<span class="sourceLineNo">255</span><a id="line.255">            factory = new WebIniSecurityManagerFactory(ini);</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">        // Create the security manager and check that it implements WebSecurityManager.</a>
<span class="sourceLineNo">259</span><a id="line.259">        // Otherwise, it can't be used with the filter.</a>
<span class="sourceLineNo">260</span><a id="line.260">        SecurityManager securityManager = factory.getInstance();</a>
<span class="sourceLineNo">261</span><a id="line.261">        if (!(securityManager instanceof WebSecurityManager)) {</a>
<span class="sourceLineNo">262</span><a id="line.262">            String msg = "The configured security manager is not an instance of WebSecurityManager, so " +</a>
<span class="sourceLineNo">263</span><a id="line.263">                    "it can not be used with the Shiro servlet filter.";</a>
<span class="sourceLineNo">264</span><a id="line.264">            throw new ConfigurationException(msg);</a>
<span class="sourceLineNo">265</span><a id="line.265">        }</a>
<span class="sourceLineNo">266</span><a id="line.266"></a>
<span class="sourceLineNo">267</span><a id="line.267">        setSecurityManager((WebSecurityManager) securityManager);</a>
<span class="sourceLineNo">268</span><a id="line.268"></a>
<span class="sourceLineNo">269</span><a id="line.269">        return factory.getBeans();</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">    protected void applyFilterChainResolver(Ini ini, Map&lt;String, ?&gt; defaults) {</a>
<span class="sourceLineNo">273</span><a id="line.273">        if (ini == null || ini.isEmpty()) {</a>
<span class="sourceLineNo">274</span><a id="line.274">            //nothing to use to create the resolver, just return</a>
<span class="sourceLineNo">275</span><a id="line.275">            //(the AbstractShiroFilter allows a null resolver, in which case the original FilterChain is</a>
<span class="sourceLineNo">276</span><a id="line.276">            // always used).</a>
<span class="sourceLineNo">277</span><a id="line.277">            return;</a>
<span class="sourceLineNo">278</span><a id="line.278">        }</a>
<span class="sourceLineNo">279</span><a id="line.279"></a>
<span class="sourceLineNo">280</span><a id="line.280">        //only create a resolver if the 'filters' or 'urls' sections are defined:</a>
<span class="sourceLineNo">281</span><a id="line.281">        Ini.Section urls = ini.getSection(IniFilterChainResolverFactory.URLS);</a>
<span class="sourceLineNo">282</span><a id="line.282">        Ini.Section filters = ini.getSection(IniFilterChainResolverFactory.FILTERS);</a>
<span class="sourceLineNo">283</span><a id="line.283">        if ((urls != null &amp;&amp; !urls.isEmpty()) || (filters != null &amp;&amp; !filters.isEmpty())) {</a>
<span class="sourceLineNo">284</span><a id="line.284">            //either the urls section or the filters section was defined.  Go ahead and create the resolver</a>
<span class="sourceLineNo">285</span><a id="line.285">            //and set it:</a>
<span class="sourceLineNo">286</span><a id="line.286">            IniFilterChainResolverFactory filterChainResolverFactory = new IniFilterChainResolverFactory(ini, defaults);</a>
<span class="sourceLineNo">287</span><a id="line.287">            filterChainResolverFactory.setFilterConfig(getFilterConfig());</a>
<span class="sourceLineNo">288</span><a id="line.288">            FilterChainResolver resolver = filterChainResolverFactory.getInstance();</a>
<span class="sourceLineNo">289</span><a id="line.289">            setFilterChainResolver(resolver);</a>
<span class="sourceLineNo">290</span><a id="line.290">        }</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">    protected Ini convertConfigToIni(String config) {</a>
<span class="sourceLineNo">294</span><a id="line.294">        Ini ini = new Ini();</a>
<span class="sourceLineNo">295</span><a id="line.295">        ini.load(config);</a>
<span class="sourceLineNo">296</span><a id="line.296">        return ini;</a>
<span class="sourceLineNo">297</span><a id="line.297">    }</a>
<span class="sourceLineNo">298</span><a id="line.298"></a>
<span class="sourceLineNo">299</span><a id="line.299">    /**</a>
<span class="sourceLineNo">300</span><a id="line.300">     * Returns the INI instance reflecting the specified servlet context resource path or {@code null} if no</a>
<span class="sourceLineNo">301</span><a id="line.301">     * resource was found.</a>
<span class="sourceLineNo">302</span><a id="line.302">     *</a>
<span class="sourceLineNo">303</span><a id="line.303">     * @param servletContextPath the servlet context resource path of the INI file to load</a>
<span class="sourceLineNo">304</span><a id="line.304">     * @return the INI instance reflecting the specified servlet context resource path or {@code null} if no</a>
<span class="sourceLineNo">305</span><a id="line.305">     *         resource was found.</a>
<span class="sourceLineNo">306</span><a id="line.306">     * @since 1.2</a>
<span class="sourceLineNo">307</span><a id="line.307">     */</a>
<span class="sourceLineNo">308</span><a id="line.308">    protected Ini getServletContextIniResource(String servletContextPath) {</a>
<span class="sourceLineNo">309</span><a id="line.309">        String path = WebUtils.normalize(servletContextPath);</a>
<span class="sourceLineNo">310</span><a id="line.310">        if (getServletContext() != null) {</a>
<span class="sourceLineNo">311</span><a id="line.311">            InputStream is = getServletContext().getResourceAsStream(path);</a>
<span class="sourceLineNo">312</span><a id="line.312">            if (is != null) {</a>
<span class="sourceLineNo">313</span><a id="line.313">                Ini ini = new Ini();</a>
<span class="sourceLineNo">314</span><a id="line.314">                ini.load(is);</a>
<span class="sourceLineNo">315</span><a id="line.315">                if (CollectionUtils.isEmpty(ini)) {</a>
<span class="sourceLineNo">316</span><a id="line.316">                    log.warn("ServletContext INI resource '" + servletContextPath + "' exists, but it did not contain " +</a>
<span class="sourceLineNo">317</span><a id="line.317">                            "any data.");</a>
<span class="sourceLineNo">318</span><a id="line.318">                }</a>
<span class="sourceLineNo">319</span><a id="line.319">                return ini;</a>
<span class="sourceLineNo">320</span><a id="line.320">            }</a>
<span class="sourceLineNo">321</span><a id="line.321">        }</a>
<span class="sourceLineNo">322</span><a id="line.322">        return null;</a>
<span class="sourceLineNo">323</span><a id="line.323">    }</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">     * Converts the specified file path to an {@link Ini} instance.</a>
<span class="sourceLineNo">327</span><a id="line.327">     * &lt;p/&gt;</a>
<span class="sourceLineNo">328</span><a id="line.328">     * If the path does not have a resource prefix as defined by {@link ResourceUtils#hasResourcePrefix(String)}, the</a>
<span class="sourceLineNo">329</span><a id="line.329">     * path is expected to be resolvable by the {@code ServletContext} via</a>
<span class="sourceLineNo">330</span><a id="line.330">     * {@link javax.servlet.ServletContext#getResourceAsStream(String)}.</a>
<span class="sourceLineNo">331</span><a id="line.331">     *</a>
<span class="sourceLineNo">332</span><a id="line.332">     * @param path the path of the INI resource to load into an INI instance.</a>
<span class="sourceLineNo">333</span><a id="line.333">     * @return an INI instance populated based on the given INI resource path.</a>
<span class="sourceLineNo">334</span><a id="line.334">     */</a>
<span class="sourceLineNo">335</span><a id="line.335">    protected Ini convertPathToIni(String path) {</a>
<span class="sourceLineNo">336</span><a id="line.336"></a>
<span class="sourceLineNo">337</span><a id="line.337">        Ini ini = new Ini();</a>
<span class="sourceLineNo">338</span><a id="line.338"></a>
<span class="sourceLineNo">339</span><a id="line.339">        //SHIRO-178: Check for servlet context resource and not</a>
<span class="sourceLineNo">340</span><a id="line.340">        //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">            ini = getServletContextIniResource(path);</a>
<span class="sourceLineNo">343</span><a id="line.343">            if (ini == null) {</a>
<span class="sourceLineNo">344</span><a id="line.344">                String msg = "There is no servlet context resource corresponding to configPath '" + path + "'  If " +</a>
<span class="sourceLineNo">345</span><a id="line.345">                        "the resource is located elsewhere (not immediately resolveable in the servlet context), " +</a>
<span class="sourceLineNo">346</span><a id="line.346">                        "specify an appropriate classpath:, url:, or file: resource prefix accordingly.";</a>
<span class="sourceLineNo">347</span><a id="line.347">                throw new ConfigurationException(msg);</a>
<span class="sourceLineNo">348</span><a id="line.348">            }</a>
<span class="sourceLineNo">349</span><a id="line.349">        } else {</a>
<span class="sourceLineNo">350</span><a id="line.350">            //normal resource path - load as usual:</a>
<span class="sourceLineNo">351</span><a id="line.351">            ini.loadFromPath(path);</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">        return ini;</a>
<span class="sourceLineNo">355</span><a id="line.355">    }</a>
<span class="sourceLineNo">356</span><a id="line.356">}</a>




























































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