<!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.config;</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.Ini;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.config.IniSecurityManagerFactory;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.mgt.SecurityManager;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.web.filter.mgt.DefaultFilter;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.web.mgt.DefaultWebSecurityManager;</a>
<span class="sourceLineNo">026</span><a id="line.26"></a>
<span class="sourceLineNo">027</span><a id="line.27">import javax.servlet.Filter;</a>
<span class="sourceLineNo">028</span><a id="line.28">import java.util.Map;</a>
<span class="sourceLineNo">029</span><a id="line.29"></a>
<span class="sourceLineNo">030</span><a id="line.30">/**</a>
<span class="sourceLineNo">031</span><a id="line.31"> * Differs from the parent class only in the {@link #createDefaultInstance()} method, to</a>
<span class="sourceLineNo">032</span><a id="line.32"> * ensure a web-capable {@code SecurityManager} instance is created by default.</a>
<span class="sourceLineNo">033</span><a id="line.33"> *</a>
<span class="sourceLineNo">034</span><a id="line.34"> * @since 1.0</a>
<span class="sourceLineNo">035</span><a id="line.35"> * @deprecated use Shiro's {@code Environment} mechanisms instead.</a>
<span class="sourceLineNo">036</span><a id="line.36"> */</a>
<span class="sourceLineNo">037</span><a id="line.37">@Deprecated</a>
<span class="sourceLineNo">038</span><a id="line.38">public class WebIniSecurityManagerFactory extends IniSecurityManagerFactory {</a>
<span class="sourceLineNo">039</span><a id="line.39"></a>
<span class="sourceLineNo">040</span><a id="line.40">    /**</a>
<span class="sourceLineNo">041</span><a id="line.41">     * Creates a new {@code WebIniSecurityManagerFactory} instance which will construct web-capable</a>
<span class="sourceLineNo">042</span><a id="line.42">     * {@code SecurityManager} instances.</a>
<span class="sourceLineNo">043</span><a id="line.43">     */</a>
<span class="sourceLineNo">044</span><a id="line.44">    public WebIniSecurityManagerFactory() {</a>
<span class="sourceLineNo">045</span><a id="line.45">        super();</a>
<span class="sourceLineNo">046</span><a id="line.46">    }</a>
<span class="sourceLineNo">047</span><a id="line.47"></a>
<span class="sourceLineNo">048</span><a id="line.48">    /**</a>
<span class="sourceLineNo">049</span><a id="line.49">     * Creates a new {@code WebIniSecurityManagerFactory} instance which will construct web-capable</a>
<span class="sourceLineNo">050</span><a id="line.50">     * {@code SecurityManager} instances.  Uses the given {@link Ini} instance to construct the instance.</a>
<span class="sourceLineNo">051</span><a id="line.51">     *</a>
<span class="sourceLineNo">052</span><a id="line.52">     * @param config the Ini configuration that will be used to construct new web-capable {@code SecurityManager}</a>
<span class="sourceLineNo">053</span><a id="line.53">     *               instances.</a>
<span class="sourceLineNo">054</span><a id="line.54">     */</a>
<span class="sourceLineNo">055</span><a id="line.55">    public WebIniSecurityManagerFactory(Ini config) {</a>
<span class="sourceLineNo">056</span><a id="line.56">        super(config);</a>
<span class="sourceLineNo">057</span><a id="line.57">    }</a>
<span class="sourceLineNo">058</span><a id="line.58"></a>
<span class="sourceLineNo">059</span><a id="line.59">    /**</a>
<span class="sourceLineNo">060</span><a id="line.60">     * Simply returns &lt;code&gt;new {@link DefaultWebSecurityManager}();&lt;/code&gt; to ensure a web-capable</a>
<span class="sourceLineNo">061</span><a id="line.61">     * {@code SecurityManager} is available by default.</a>
<span class="sourceLineNo">062</span><a id="line.62">     *</a>
<span class="sourceLineNo">063</span><a id="line.63">     * @return a new web-capable {@code SecurityManager} instance.</a>
<span class="sourceLineNo">064</span><a id="line.64">     */</a>
<span class="sourceLineNo">065</span><a id="line.65">    @Override</a>
<span class="sourceLineNo">066</span><a id="line.66">    protected SecurityManager createDefaultInstance() {</a>
<span class="sourceLineNo">067</span><a id="line.67">        return new DefaultWebSecurityManager();</a>
<span class="sourceLineNo">068</span><a id="line.68">    }</a>
<span class="sourceLineNo">069</span><a id="line.69"></a>
<span class="sourceLineNo">070</span><a id="line.70">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">071</span><a id="line.71">    @Override</a>
<span class="sourceLineNo">072</span><a id="line.72">    protected Map&lt;String, ?&gt; createDefaults(Ini ini, Ini.Section mainSection) {</a>
<span class="sourceLineNo">073</span><a id="line.73">        Map defaults = super.createDefaults(ini, mainSection);</a>
<span class="sourceLineNo">074</span><a id="line.74">        //add the default filters:</a>
<span class="sourceLineNo">075</span><a id="line.75">        Map&lt;String, Filter&gt; defaultFilters = DefaultFilter.createInstanceMap(null);</a>
<span class="sourceLineNo">076</span><a id="line.76">        defaults.putAll(defaultFilters);</a>
<span class="sourceLineNo">077</span><a id="line.77">        return defaults;</a>
<span class="sourceLineNo">078</span><a id="line.78">    }</a>
<span class="sourceLineNo">079</span><a id="line.79">}</a>




























































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