<!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.guice.web;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import java.util.*;</a>
<span class="sourceLineNo">022</span><a id="line.22"></a>
<span class="sourceLineNo">023</span><a id="line.23">import javax.servlet.Filter;</a>
<span class="sourceLineNo">024</span><a id="line.24">import javax.servlet.ServletContext;</a>
<span class="sourceLineNo">025</span><a id="line.25"></a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.shiro.config.ConfigurationException;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.apache.shiro.env.Environment;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.apache.shiro.guice.ShiroModule;</a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.shiro.mgt.SecurityManager;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.apache.shiro.session.mgt.SessionManager;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">032</span><a id="line.32">import org.apache.shiro.web.env.WebEnvironment;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.apache.shiro.web.filter.PathMatchingFilter;</a>
<span class="sourceLineNo">034</span><a id="line.34">import org.apache.shiro.web.filter.authc.AnonymousFilter;</a>
<span class="sourceLineNo">035</span><a id="line.35">import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;</a>
<span class="sourceLineNo">036</span><a id="line.36">import org.apache.shiro.web.filter.authc.BearerHttpAuthenticationFilter;</a>
<span class="sourceLineNo">037</span><a id="line.37">import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;</a>
<span class="sourceLineNo">038</span><a id="line.38">import org.apache.shiro.web.filter.authc.LogoutFilter;</a>
<span class="sourceLineNo">039</span><a id="line.39">import org.apache.shiro.web.filter.authc.UserFilter;</a>
<span class="sourceLineNo">040</span><a id="line.40">import org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter;</a>
<span class="sourceLineNo">041</span><a id="line.41">import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;</a>
<span class="sourceLineNo">042</span><a id="line.42">import org.apache.shiro.web.filter.authz.PortFilter;</a>
<span class="sourceLineNo">043</span><a id="line.43">import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter;</a>
<span class="sourceLineNo">044</span><a id="line.44">import org.apache.shiro.web.filter.authz.SslFilter;</a>
<span class="sourceLineNo">045</span><a id="line.45">import org.apache.shiro.web.filter.mgt.FilterChainResolver;</a>
<span class="sourceLineNo">046</span><a id="line.46">import org.apache.shiro.web.filter.session.NoSessionCreationFilter;</a>
<span class="sourceLineNo">047</span><a id="line.47">import org.apache.shiro.web.mgt.DefaultWebSecurityManager;</a>
<span class="sourceLineNo">048</span><a id="line.48">import org.apache.shiro.web.mgt.WebSecurityManager;</a>
<span class="sourceLineNo">049</span><a id="line.49">import org.apache.shiro.web.session.mgt.ServletContainerSessionManager;</a>
<span class="sourceLineNo">050</span><a id="line.50"></a>
<span class="sourceLineNo">051</span><a id="line.51">import com.google.inject.Binder;</a>
<span class="sourceLineNo">052</span><a id="line.52">import com.google.inject.Key;</a>
<span class="sourceLineNo">053</span><a id="line.53">import com.google.inject.TypeLiteral;</a>
<span class="sourceLineNo">054</span><a id="line.54">import com.google.inject.binder.AnnotatedBindingBuilder;</a>
<span class="sourceLineNo">055</span><a id="line.55">import com.google.inject.name.Names;</a>
<span class="sourceLineNo">056</span><a id="line.56">import com.google.inject.servlet.ServletModule;</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"> * Sets up Shiro lifecycles within Guice, enables the injecting of Shiro objects, and binds a default</a>
<span class="sourceLineNo">060</span><a id="line.60"> * {@link org.apache.shiro.web.mgt.WebSecurityManager}, {@link org.apache.shiro.mgt.SecurityManager} and {@link org.apache.shiro.session.mgt.SessionManager}.  At least one realm must be added by</a>
<span class="sourceLineNo">061</span><a id="line.61"> * using {@link #bindRealm() bindRealm}.</a>
<span class="sourceLineNo">062</span><a id="line.62"> * &lt;p/&gt;</a>
<span class="sourceLineNo">063</span><a id="line.63"> * Also provides for the configuring of filter chains and binds a {@link org.apache.shiro.web.filter.mgt.FilterChainResolver} with that information.</a>
<span class="sourceLineNo">064</span><a id="line.64"> */</a>
<span class="sourceLineNo">065</span><a id="line.65">public abstract class ShiroWebModule extends ShiroModule {</a>
<span class="sourceLineNo">066</span><a id="line.66">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">067</span><a id="line.67">    public static final Key&lt;AnonymousFilter&gt; ANON = Key.get(AnonymousFilter.class);</a>
<span class="sourceLineNo">068</span><a id="line.68">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">069</span><a id="line.69">    public static final Key&lt;FormAuthenticationFilter&gt; AUTHC = Key.get(FormAuthenticationFilter.class);</a>
<span class="sourceLineNo">070</span><a id="line.70">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">071</span><a id="line.71">    public static final Key&lt;BasicHttpAuthenticationFilter&gt; AUTHC_BASIC = Key.get(BasicHttpAuthenticationFilter.class);</a>
<span class="sourceLineNo">072</span><a id="line.72">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">073</span><a id="line.73">    public static final Key&lt;BearerHttpAuthenticationFilter&gt; AUTHC_BEARER = Key.get(BearerHttpAuthenticationFilter.class);</a>
<span class="sourceLineNo">074</span><a id="line.74">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">075</span><a id="line.75">    public static final Key&lt;NoSessionCreationFilter&gt; NO_SESSION_CREATION = Key.get(NoSessionCreationFilter.class);</a>
<span class="sourceLineNo">076</span><a id="line.76">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">077</span><a id="line.77">    public static final Key&lt;LogoutFilter&gt; LOGOUT = Key.get(LogoutFilter.class);</a>
<span class="sourceLineNo">078</span><a id="line.78">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">079</span><a id="line.79">    public static final Key&lt;PermissionsAuthorizationFilter&gt; PERMS = Key.get(PermissionsAuthorizationFilter.class);</a>
<span class="sourceLineNo">080</span><a id="line.80">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">081</span><a id="line.81">    public static final Key&lt;PortFilter&gt; PORT = Key.get(PortFilter.class);</a>
<span class="sourceLineNo">082</span><a id="line.82">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">083</span><a id="line.83">    public static final Key&lt;HttpMethodPermissionFilter&gt; REST = Key.get(HttpMethodPermissionFilter.class);</a>
<span class="sourceLineNo">084</span><a id="line.84">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">085</span><a id="line.85">    public static final Key&lt;RolesAuthorizationFilter&gt; ROLES = Key.get(RolesAuthorizationFilter.class);</a>
<span class="sourceLineNo">086</span><a id="line.86">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">087</span><a id="line.87">    public static final Key&lt;SslFilter&gt; SSL = Key.get(SslFilter.class);</a>
<span class="sourceLineNo">088</span><a id="line.88">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">089</span><a id="line.89">    public static final Key&lt;UserFilter&gt; USER = Key.get(UserFilter.class);</a>
<span class="sourceLineNo">090</span><a id="line.90"></a>
<span class="sourceLineNo">091</span><a id="line.91"></a>
<span class="sourceLineNo">092</span><a id="line.92">    static final String NAME = "SHIRO";</a>
<span class="sourceLineNo">093</span><a id="line.93"></a>
<span class="sourceLineNo">094</span><a id="line.94">    /**</a>
<span class="sourceLineNo">095</span><a id="line.95">     * We use a LinkedHashMap here to ensure that iterator order is the same as add order.  This is important, as the</a>
<span class="sourceLineNo">096</span><a id="line.96">     * FilterChainResolver uses iterator order when searching for a matching chain.</a>
<span class="sourceLineNo">097</span><a id="line.97">     */</a>
<span class="sourceLineNo">098</span><a id="line.98">    private final Map&lt;String, FilterConfig&lt;? extends Filter&gt;[]&gt; filterChains = new LinkedHashMap&lt;String, FilterConfig&lt;? extends Filter&gt;[]&gt;();</a>
<span class="sourceLineNo">099</span><a id="line.99">    private final ServletContext servletContext;</a>
<span class="sourceLineNo">100</span><a id="line.100"></a>
<span class="sourceLineNo">101</span><a id="line.101">    public ShiroWebModule(ServletContext servletContext) {</a>
<span class="sourceLineNo">102</span><a id="line.102">        this.servletContext = servletContext;</a>
<span class="sourceLineNo">103</span><a id="line.103">    }</a>
<span class="sourceLineNo">104</span><a id="line.104"></a>
<span class="sourceLineNo">105</span><a id="line.105">    public static void bindGuiceFilter(Binder binder) {</a>
<span class="sourceLineNo">106</span><a id="line.106">        binder.install(guiceFilterModule());</a>
<span class="sourceLineNo">107</span><a id="line.107">    }</a>
<span class="sourceLineNo">108</span><a id="line.108"></a>
<span class="sourceLineNo">109</span><a id="line.109">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">110</span><a id="line.110">    public static void bindGuiceFilter(final String pattern, Binder binder) {</a>
<span class="sourceLineNo">111</span><a id="line.111">        binder.install(guiceFilterModule(pattern));</a>
<span class="sourceLineNo">112</span><a id="line.112">    }</a>
<span class="sourceLineNo">113</span><a id="line.113"></a>
<span class="sourceLineNo">114</span><a id="line.114">    public static ServletModule guiceFilterModule() {</a>
<span class="sourceLineNo">115</span><a id="line.115">        return guiceFilterModule("/*");</a>
<span class="sourceLineNo">116</span><a id="line.116">    }</a>
<span class="sourceLineNo">117</span><a id="line.117"></a>
<span class="sourceLineNo">118</span><a id="line.118">    public static ServletModule guiceFilterModule(final String pattern) {</a>
<span class="sourceLineNo">119</span><a id="line.119">        return new ServletModule() {</a>
<span class="sourceLineNo">120</span><a id="line.120">            @Override</a>
<span class="sourceLineNo">121</span><a id="line.121">            protected void configureServlets() {</a>
<span class="sourceLineNo">122</span><a id="line.122">                filter(pattern).through(GuiceShiroFilter.class);</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"></a>
<span class="sourceLineNo">127</span><a id="line.127">    @Override</a>
<span class="sourceLineNo">128</span><a id="line.128">    protected final void configureShiro() {</a>
<span class="sourceLineNo">129</span><a id="line.129">        bindBeanType(TypeLiteral.get(ServletContext.class), Key.get(ServletContext.class, Names.named(NAME)));</a>
<span class="sourceLineNo">130</span><a id="line.130">        bind(Key.get(ServletContext.class, Names.named(NAME))).toInstance(this.servletContext);</a>
<span class="sourceLineNo">131</span><a id="line.131">        bindWebSecurityManager(bind(WebSecurityManager.class));</a>
<span class="sourceLineNo">132</span><a id="line.132">        bindWebEnvironment(bind(WebEnvironment.class));</a>
<span class="sourceLineNo">133</span><a id="line.133">        bind(GuiceShiroFilter.class).asEagerSingleton();</a>
<span class="sourceLineNo">134</span><a id="line.134">        expose(GuiceShiroFilter.class);</a>
<span class="sourceLineNo">135</span><a id="line.135"></a>
<span class="sourceLineNo">136</span><a id="line.136">        this.configureShiroWeb();</a>
<span class="sourceLineNo">137</span><a id="line.137"></a>
<span class="sourceLineNo">138</span><a id="line.138">        bind(FilterChainResolver.class).toProvider(new FilterChainResolverProvider(setupFilterChainConfigs()));</a>
<span class="sourceLineNo">139</span><a id="line.139">    }</a>
<span class="sourceLineNo">140</span><a id="line.140"></a>
<span class="sourceLineNo">141</span><a id="line.141">    private Map&lt;String, Key&lt;? extends Filter&gt;[]&gt; setupFilterChainConfigs() {</a>
<span class="sourceLineNo">142</span><a id="line.142"></a>
<span class="sourceLineNo">143</span><a id="line.143">        // loop through and build a map of Filter Key -&gt; Map&lt;Path, Config&gt;</a>
<span class="sourceLineNo">144</span><a id="line.144">        Map&lt;Key&lt;? extends Filter&gt;, Map&lt;String, String&gt;&gt; filterToPathToConfig = new HashMap&lt;Key&lt;? extends Filter&gt;, Map&lt;String, String&gt;&gt;();</a>
<span class="sourceLineNo">145</span><a id="line.145"></a>
<span class="sourceLineNo">146</span><a id="line.146">        // At the same time build a map to return with Path -&gt; Key[]</a>
<span class="sourceLineNo">147</span><a id="line.147">        Map&lt;String, Key&lt;? extends Filter&gt;[]&gt; resultConfigMap = new LinkedHashMap&lt;String, Key&lt;? extends Filter&gt;[]&gt;();</a>
<span class="sourceLineNo">148</span><a id="line.148"></a>
<span class="sourceLineNo">149</span><a id="line.149">        for (Map.Entry&lt;String, FilterConfig&lt;? extends Filter&gt;[]&gt; filterChain : filterChains.entrySet()) {</a>
<span class="sourceLineNo">150</span><a id="line.150"></a>
<span class="sourceLineNo">151</span><a id="line.151">            String path = filterChain.getKey();</a>
<span class="sourceLineNo">152</span><a id="line.152"></a>
<span class="sourceLineNo">153</span><a id="line.153">            // collect the keys used for this path</a>
<span class="sourceLineNo">154</span><a id="line.154">            List&lt;Key&lt;? extends Filter&gt;&gt; keysForPath = new ArrayList&lt;Key&lt;? extends Filter&gt;&gt;();</a>
<span class="sourceLineNo">155</span><a id="line.155"></a>
<span class="sourceLineNo">156</span><a id="line.156">            for (int i = 0; i &lt; filterChain.getValue().length; i++) {</a>
<span class="sourceLineNo">157</span><a id="line.157">                FilterConfig&lt;? extends Filter&gt; filterConfig = filterChain.getValue()[i];</a>
<span class="sourceLineNo">158</span><a id="line.158"></a>
<span class="sourceLineNo">159</span><a id="line.159">                Key&lt;? extends Filter&gt; key = filterConfig.getKey();</a>
<span class="sourceLineNo">160</span><a id="line.160">                String config = filterConfig.getConfigValue();</a>
<span class="sourceLineNo">161</span><a id="line.161"></a>
<span class="sourceLineNo">162</span><a id="line.162">                // initialize key in filterToPathToConfig, if it doesn't exist</a>
<span class="sourceLineNo">163</span><a id="line.163">                if (filterToPathToConfig.get(key) == null) {</a>
<span class="sourceLineNo">164</span><a id="line.164">                        // Fix for SHIRO-621: REST filter bypassing matched path</a>
<span class="sourceLineNo">165</span><a id="line.165">                    filterToPathToConfig.put((key), new LinkedHashMap&lt;String, String&gt;());</a>
<span class="sourceLineNo">166</span><a id="line.166">                }</a>
<span class="sourceLineNo">167</span><a id="line.167">                // now set the value</a>
<span class="sourceLineNo">168</span><a id="line.168">                filterToPathToConfig.get(key).put(path, config);</a>
<span class="sourceLineNo">169</span><a id="line.169"></a>
<span class="sourceLineNo">170</span><a id="line.170">                // Config error if someone configured a non PathMatchingFilter with a config value</a>
<span class="sourceLineNo">171</span><a id="line.171">                if (StringUtils.hasText(config) &amp;&amp; !PathMatchingFilter.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {</a>
<span class="sourceLineNo">172</span><a id="line.172">                    throw new ConfigurationException("Config information requires a PathMatchingFilter - can't apply to " + key.getTypeLiteral().getRawType());</a>
<span class="sourceLineNo">173</span><a id="line.173">                }</a>
<span class="sourceLineNo">174</span><a id="line.174"></a>
<span class="sourceLineNo">175</span><a id="line.175">                // store the key in keysForPath</a>
<span class="sourceLineNo">176</span><a id="line.176">                keysForPath.add(key);</a>
<span class="sourceLineNo">177</span><a id="line.177">            }</a>
<span class="sourceLineNo">178</span><a id="line.178"></a>
<span class="sourceLineNo">179</span><a id="line.179">            // map the current path to all of its Keys</a>
<span class="sourceLineNo">180</span><a id="line.180">            resultConfigMap.put(path, keysForPath.toArray(new Key[keysForPath.size()]));</a>
<span class="sourceLineNo">181</span><a id="line.181">        }</a>
<span class="sourceLineNo">182</span><a id="line.182"></a>
<span class="sourceLineNo">183</span><a id="line.183">        // now we find only the PathMatchingFilter and configure bindings</a>
<span class="sourceLineNo">184</span><a id="line.184">        // non PathMatchingFilter, can be loaded with the default provider via the class name</a>
<span class="sourceLineNo">185</span><a id="line.185">        for (Key&lt;? extends Filter&gt; key : filterToPathToConfig.keySet()) {</a>
<span class="sourceLineNo">186</span><a id="line.186">            if (PathMatchingFilter.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {</a>
<span class="sourceLineNo">187</span><a id="line.187">                bindPathMatchingFilter(castToPathMatching(key), filterToPathToConfig.get(key));</a>
<span class="sourceLineNo">188</span><a id="line.188">            }</a>
<span class="sourceLineNo">189</span><a id="line.189">            else {</a>
<span class="sourceLineNo">190</span><a id="line.190">                bind(key);</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"></a>
<span class="sourceLineNo">194</span><a id="line.194">        return resultConfigMap;</a>
<span class="sourceLineNo">195</span><a id="line.195">    }</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">    private &lt;T extends PathMatchingFilter&gt; void bindPathMatchingFilter(Key&lt;T&gt; filterKey, Map&lt;String, String&gt; configs) {</a>
<span class="sourceLineNo">199</span><a id="line.199">        bind(filterKey).toProvider(new PathMatchingFilterProvider&lt;T&gt;(filterKey, configs)).asEagerSingleton();</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">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">203</span><a id="line.203">    private Key&lt;? extends PathMatchingFilter&gt; castToPathMatching(Key&lt;? extends Filter&gt; key) {</a>
<span class="sourceLineNo">204</span><a id="line.204">        return (Key&lt;? extends PathMatchingFilter&gt;) key;</a>
<span class="sourceLineNo">205</span><a id="line.205">    }</a>
<span class="sourceLineNo">206</span><a id="line.206"></a>
<span class="sourceLineNo">207</span><a id="line.207">    protected abstract void configureShiroWeb();</a>
<span class="sourceLineNo">208</span><a id="line.208"></a>
<span class="sourceLineNo">209</span><a id="line.209">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">210</span><a id="line.210">    @Override</a>
<span class="sourceLineNo">211</span><a id="line.211">    protected final void bindSecurityManager(AnnotatedBindingBuilder&lt;? super SecurityManager&gt; bind) {</a>
<span class="sourceLineNo">212</span><a id="line.212">        bind.to(WebSecurityManager.class); // SHIRO-435</a>
<span class="sourceLineNo">213</span><a id="line.213">    }</a>
<span class="sourceLineNo">214</span><a id="line.214"></a>
<span class="sourceLineNo">215</span><a id="line.215">    /**</a>
<span class="sourceLineNo">216</span><a id="line.216">     * Binds the security manager.  Override this method in order to provide your own security manager binding.</a>
<span class="sourceLineNo">217</span><a id="line.217">     * &lt;p/&gt;</a>
<span class="sourceLineNo">218</span><a id="line.218">     * By default, a {@link org.apache.shiro.web.mgt.DefaultWebSecurityManager} is bound as an eager singleton.</a>
<span class="sourceLineNo">219</span><a id="line.219">     *</a>
<span class="sourceLineNo">220</span><a id="line.220">     * @param bind</a>
<span class="sourceLineNo">221</span><a id="line.221">     */</a>
<span class="sourceLineNo">222</span><a id="line.222">    protected void bindWebSecurityManager(AnnotatedBindingBuilder&lt;? super WebSecurityManager&gt; bind) {</a>
<span class="sourceLineNo">223</span><a id="line.223">        try {</a>
<span class="sourceLineNo">224</span><a id="line.224">            bind.toConstructor(DefaultWebSecurityManager.class.getConstructor(Collection.class)).asEagerSingleton();</a>
<span class="sourceLineNo">225</span><a id="line.225">        } catch (NoSuchMethodException e) {</a>
<span class="sourceLineNo">226</span><a id="line.226">            throw new ConfigurationException("This really shouldn't happen.  Either something has changed in Shiro, or there's a bug in ShiroModule.", e);</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"></a>
<span class="sourceLineNo">230</span><a id="line.230">    /**</a>
<span class="sourceLineNo">231</span><a id="line.231">     * Binds the session manager.  Override this method in order to provide your own session manager binding.</a>
<span class="sourceLineNo">232</span><a id="line.232">     * &lt;p/&gt;</a>
<span class="sourceLineNo">233</span><a id="line.233">     * By default, a {@link org.apache.shiro.web.session.mgt.DefaultWebSessionManager} is bound as an eager singleton.</a>
<span class="sourceLineNo">234</span><a id="line.234">     *</a>
<span class="sourceLineNo">235</span><a id="line.235">     * @param bind</a>
<span class="sourceLineNo">236</span><a id="line.236">     */</a>
<span class="sourceLineNo">237</span><a id="line.237">    @Override</a>
<span class="sourceLineNo">238</span><a id="line.238">    protected void bindSessionManager(AnnotatedBindingBuilder&lt;SessionManager&gt; bind) {</a>
<span class="sourceLineNo">239</span><a id="line.239">        bind.to(ServletContainerSessionManager.class).asEagerSingleton();</a>
<span class="sourceLineNo">240</span><a id="line.240">    }</a>
<span class="sourceLineNo">241</span><a id="line.241"></a>
<span class="sourceLineNo">242</span><a id="line.242">    @Override</a>
<span class="sourceLineNo">243</span><a id="line.243">    protected final void bindEnvironment(AnnotatedBindingBuilder&lt;Environment&gt; bind) {</a>
<span class="sourceLineNo">244</span><a id="line.244">        bind.to(WebEnvironment.class); // SHIRO-435</a>
<span class="sourceLineNo">245</span><a id="line.245">    }</a>
<span class="sourceLineNo">246</span><a id="line.246"></a>
<span class="sourceLineNo">247</span><a id="line.247">    protected void bindWebEnvironment(AnnotatedBindingBuilder&lt;? super WebEnvironment&gt; bind) {</a>
<span class="sourceLineNo">248</span><a id="line.248">        bind.to(WebGuiceEnvironment.class).asEagerSingleton();</a>
<span class="sourceLineNo">249</span><a id="line.249">    }</a>
<span class="sourceLineNo">250</span><a id="line.250"></a>
<span class="sourceLineNo">251</span><a id="line.251">    protected final void addFilterChain(String pattern, Key&lt;? extends Filter&gt; key) {</a>
<span class="sourceLineNo">252</span><a id="line.252">        // check for legacy API</a>
<span class="sourceLineNo">253</span><a id="line.253">        if (key instanceof FilterConfigKey) {</a>
<span class="sourceLineNo">254</span><a id="line.254">            addLegacyFilterChain(pattern, (FilterConfigKey) key);</a>
<span class="sourceLineNo">255</span><a id="line.255">        }</a>
<span class="sourceLineNo">256</span><a id="line.256">        else {</a>
<span class="sourceLineNo">257</span><a id="line.257">            addFilterChain(pattern, new FilterConfig&lt;Filter&gt;((Key&lt;Filter&gt;) key, ""));</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">    /**</a>
<span class="sourceLineNo">262</span><a id="line.262">     * Maps 'n' number of &lt;code&gt;filterConfig&lt;/code&gt;s to a specific path pattern.&lt;BR/&gt;</a>
<span class="sourceLineNo">263</span><a id="line.263">     * For example, a path of '/my_private_resource/**' to 'filterConfig(AUTHC)' would require</a>
<span class="sourceLineNo">264</span><a id="line.264">     * any resource under the path '/my_private_resource' would be processed through the {@link FormAuthenticationFilter}.</a>
<span class="sourceLineNo">265</span><a id="line.265">     *</a>
<span class="sourceLineNo">266</span><a id="line.266">     * @param pattern URL patter to be mapped to a FilterConfig, e.g. '/my_private-path/**'</a>
<span class="sourceLineNo">267</span><a id="line.267">     * @param filterConfigs FilterConfiguration representing the Filter and config to be used when processing resources on &lt;code&gt;pattern&lt;/code&gt;.</a>
<span class="sourceLineNo">268</span><a id="line.268">     * @since 1.4</a>
<span class="sourceLineNo">269</span><a id="line.269">     */</a>
<span class="sourceLineNo">270</span><a id="line.270">    protected final void addFilterChain(String pattern, FilterConfig&lt;? extends Filter&gt;... filterConfigs) {</a>
<span class="sourceLineNo">271</span><a id="line.271">        filterChains.put(pattern, filterConfigs);</a>
<span class="sourceLineNo">272</span><a id="line.272">    }</a>
<span class="sourceLineNo">273</span><a id="line.273"></a>
<span class="sourceLineNo">274</span><a id="line.274">    /**</a>
<span class="sourceLineNo">275</span><a id="line.275">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">276</span><a id="line.276">     * @param baseKey The Key of the Filter class to be used.</a>
<span class="sourceLineNo">277</span><a id="line.277">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">278</span><a id="line.278">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">279</span><a id="line.279">     * @since 1.4</a>
<span class="sourceLineNo">280</span><a id="line.280">     */</a>
<span class="sourceLineNo">281</span><a id="line.281">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(Key&lt;T&gt; baseKey, String configValue) {</a>
<span class="sourceLineNo">282</span><a id="line.282">        return new FilterConfig&lt;T&gt;(baseKey, configValue);</a>
<span class="sourceLineNo">283</span><a id="line.283">    }</a>
<span class="sourceLineNo">284</span><a id="line.284"></a>
<span class="sourceLineNo">285</span><a id="line.285">    /**</a>
<span class="sourceLineNo">286</span><a id="line.286">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">287</span><a id="line.287">     * @param baseKey The Key of the Filter class to be used.</a>
<span class="sourceLineNo">288</span><a id="line.288">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">289</span><a id="line.289">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">290</span><a id="line.290">     * @since 1.4</a>
<span class="sourceLineNo">291</span><a id="line.291">     */</a>
<span class="sourceLineNo">292</span><a id="line.292">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(Key&lt;T&gt; baseKey) {</a>
<span class="sourceLineNo">293</span><a id="line.293">        return filterConfig(baseKey, "");</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">    /**</a>
<span class="sourceLineNo">297</span><a id="line.297">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">298</span><a id="line.298">     * @param typeLiteral The TyleLiteral of the filter key to be used.</a>
<span class="sourceLineNo">299</span><a id="line.299">     * @param configValue the configuration used.</a>
<span class="sourceLineNo">300</span><a id="line.300">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">301</span><a id="line.301">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">302</span><a id="line.302">     * @since 1.4</a>
<span class="sourceLineNo">303</span><a id="line.303">     */</a>
<span class="sourceLineNo">304</span><a id="line.304">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">305</span><a id="line.305">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(TypeLiteral&lt;T&gt; typeLiteral, String configValue) {</a>
<span class="sourceLineNo">306</span><a id="line.306">        return filterConfig(Key.get(typeLiteral), configValue);</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">    /**</a>
<span class="sourceLineNo">310</span><a id="line.310">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">311</span><a id="line.311">     * @param type The filter to be used.</a>
<span class="sourceLineNo">312</span><a id="line.312">     * @param configValue the configuration used.</a>
<span class="sourceLineNo">313</span><a id="line.313">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">314</span><a id="line.314">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">315</span><a id="line.315">     * @since 1.4</a>
<span class="sourceLineNo">316</span><a id="line.316">     */</a>
<span class="sourceLineNo">317</span><a id="line.317">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">318</span><a id="line.318">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(Class&lt;T&gt; type, String configValue) {</a>
<span class="sourceLineNo">319</span><a id="line.319">        return filterConfig(Key.get(type), configValue);</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"></a>
<span class="sourceLineNo">323</span><a id="line.323">    /**</a>
<span class="sourceLineNo">324</span><a id="line.324">     * Filter configuration which pairs a Filter class with its configuration used on a path.</a>
<span class="sourceLineNo">325</span><a id="line.325">     * @param &lt;T&gt; The Servlet Filter class.</a>
<span class="sourceLineNo">326</span><a id="line.326">     * @since 1.4</a>
<span class="sourceLineNo">327</span><a id="line.327">     */</a>
<span class="sourceLineNo">328</span><a id="line.328">    public static class FilterConfig&lt;T extends Filter&gt; {</a>
<span class="sourceLineNo">329</span><a id="line.329">        private Key&lt;T&gt; key;</a>
<span class="sourceLineNo">330</span><a id="line.330">        private String configValue;</a>
<span class="sourceLineNo">331</span><a id="line.331"></a>
<span class="sourceLineNo">332</span><a id="line.332">        private FilterConfig(Key&lt;T&gt; key, String configValue) {</a>
<span class="sourceLineNo">333</span><a id="line.333">            super();</a>
<span class="sourceLineNo">334</span><a id="line.334">            this.key = key;</a>
<span class="sourceLineNo">335</span><a id="line.335">            this.configValue = configValue;</a>
<span class="sourceLineNo">336</span><a id="line.336">        }</a>
<span class="sourceLineNo">337</span><a id="line.337"></a>
<span class="sourceLineNo">338</span><a id="line.338">        public Key&lt;T&gt; getKey() {</a>
<span class="sourceLineNo">339</span><a id="line.339">            return key;</a>
<span class="sourceLineNo">340</span><a id="line.340">        }</a>
<span class="sourceLineNo">341</span><a id="line.341"></a>
<span class="sourceLineNo">342</span><a id="line.342">        public String getConfigValue() {</a>
<span class="sourceLineNo">343</span><a id="line.343">            return configValue;</a>
<span class="sourceLineNo">344</span><a id="line.344">        }</a>
<span class="sourceLineNo">345</span><a id="line.345">    }</a>
<span class="sourceLineNo">346</span><a id="line.346"></a>
<span class="sourceLineNo">347</span><a id="line.347"></a>
<span class="sourceLineNo">348</span><a id="line.348"></a>
<span class="sourceLineNo">349</span><a id="line.349"></a>
<span class="sourceLineNo">350</span><a id="line.350"></a>
<span class="sourceLineNo">351</span><a id="line.351"></a>
<span class="sourceLineNo">352</span><a id="line.352"></a>
<span class="sourceLineNo">353</span><a id="line.353">    // legacy methods</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">    static boolean isGuiceVersion3() {</a>
<span class="sourceLineNo">357</span><a id="line.357">        try {</a>
<span class="sourceLineNo">358</span><a id="line.358">            Class.forName("com.google.inject.multibindings.MapKey");</a>
<span class="sourceLineNo">359</span><a id="line.359">            return false;</a>
<span class="sourceLineNo">360</span><a id="line.360">        } catch (ClassNotFoundException e) {</a>
<span class="sourceLineNo">361</span><a id="line.361">            return true;</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">    private void addLegacyFilterChain(String pattern, FilterConfigKey filterConfigKey) {</a>
<span class="sourceLineNo">366</span><a id="line.366"></a>
<span class="sourceLineNo">367</span><a id="line.367">        FilterConfig&lt;Filter&gt; filterConfig = new FilterConfig&lt;Filter&gt;(filterConfigKey.getKey(), filterConfigKey.getConfigValue());</a>
<span class="sourceLineNo">368</span><a id="line.368">        addFilterChain(pattern, filterConfig);</a>
<span class="sourceLineNo">369</span><a id="line.369">    }</a>
<span class="sourceLineNo">370</span><a id="line.370"></a>
<span class="sourceLineNo">371</span><a id="line.371">    /**</a>
<span class="sourceLineNo">372</span><a id="line.372">     * Adds a filter chain to the shiro configuration.</a>
<span class="sourceLineNo">373</span><a id="line.373">     * &lt;p/&gt;</a>
<span class="sourceLineNo">374</span><a id="line.374">     * NOTE: If the provided key is for a subclass of {@link org.apache.shiro.web.filter.PathMatchingFilter}, it will be registered with a proper</a>
<span class="sourceLineNo">375</span><a id="line.375">     * provider.</a>
<span class="sourceLineNo">376</span><a id="line.376">     *</a>
<span class="sourceLineNo">377</span><a id="line.377">     * @param pattern</a>
<span class="sourceLineNo">378</span><a id="line.378">     * @param keys</a>
<span class="sourceLineNo">379</span><a id="line.379">     */</a>
<span class="sourceLineNo">380</span><a id="line.380">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">381</span><a id="line.381">    @Deprecated</a>
<span class="sourceLineNo">382</span><a id="line.382">    protected final void addFilterChain(String pattern, Key&lt;? extends Filter&gt;... keys) {</a>
<span class="sourceLineNo">383</span><a id="line.383"></a>
<span class="sourceLineNo">384</span><a id="line.384">        // We need to extract the keys and FilterConfigKey and convert to the new format.</a>
<span class="sourceLineNo">385</span><a id="line.385"></a>
<span class="sourceLineNo">386</span><a id="line.386">        FilterConfig[] filterConfigs = new FilterConfig[keys.length];</a>
<span class="sourceLineNo">387</span><a id="line.387">        for (int ii = 0; ii &lt; keys.length; ii++) {</a>
<span class="sourceLineNo">388</span><a id="line.388">            Key&lt;? extends Filter&gt; key = keys[ii];</a>
<span class="sourceLineNo">389</span><a id="line.389">            // If this is a path matching filter, we need to remember the config</a>
<span class="sourceLineNo">390</span><a id="line.390">            if (key instanceof FilterConfigKey) {</a>
<span class="sourceLineNo">391</span><a id="line.391">                // legacy config</a>
<span class="sourceLineNo">392</span><a id="line.392">                FilterConfigKey legacyKey = (FilterConfigKey) key;</a>
<span class="sourceLineNo">393</span><a id="line.393">                filterConfigs[ii] = new FilterConfig(legacyKey.getKey(), legacyKey.getConfigValue());</a>
<span class="sourceLineNo">394</span><a id="line.394">            }</a>
<span class="sourceLineNo">395</span><a id="line.395">            else {</a>
<span class="sourceLineNo">396</span><a id="line.396">                // Some other type of Filter key, no config</a>
<span class="sourceLineNo">397</span><a id="line.397">                filterConfigs[ii] = new FilterConfig(key, "");</a>
<span class="sourceLineNo">398</span><a id="line.398">            }</a>
<span class="sourceLineNo">399</span><a id="line.399">        }</a>
<span class="sourceLineNo">400</span><a id="line.400"></a>
<span class="sourceLineNo">401</span><a id="line.401">        filterChains.put(pattern, filterConfigs);</a>
<span class="sourceLineNo">402</span><a id="line.402">    }</a>
<span class="sourceLineNo">403</span><a id="line.403"></a>
<span class="sourceLineNo">404</span><a id="line.404">    @Deprecated</a>
<span class="sourceLineNo">405</span><a id="line.405">    protected static &lt;T extends PathMatchingFilter&gt; Key&lt;T&gt; config(Key&lt;T&gt; baseKey, String configValue) {</a>
<span class="sourceLineNo">406</span><a id="line.406"></a>
<span class="sourceLineNo">407</span><a id="line.407">        if( !isGuiceVersion3()) {</a>
<span class="sourceLineNo">408</span><a id="line.408">            throw new ConfigurationException("Method ShiroWebModule.config(Key&lt;? extends PathMatchingFilter&gt;, String configValue), is not supported when using Guice 4+");</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">        return new FilterConfigKey&lt;T&gt;(baseKey, configValue);</a>
<span class="sourceLineNo">412</span><a id="line.412">    }</a>
<span class="sourceLineNo">413</span><a id="line.413"></a>
<span class="sourceLineNo">414</span><a id="line.414">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">415</span><a id="line.415">    @Deprecated</a>
<span class="sourceLineNo">416</span><a id="line.416">    protected static &lt;T extends PathMatchingFilter&gt; Key&lt;T&gt; config(TypeLiteral&lt;T&gt; typeLiteral, String configValue) {</a>
<span class="sourceLineNo">417</span><a id="line.417">        return config(Key.get(typeLiteral), configValue);</a>
<span class="sourceLineNo">418</span><a id="line.418">    }</a>
<span class="sourceLineNo">419</span><a id="line.419"></a>
<span class="sourceLineNo">420</span><a id="line.420">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">421</span><a id="line.421">    @Deprecated</a>
<span class="sourceLineNo">422</span><a id="line.422">    protected static &lt;T extends PathMatchingFilter&gt; Key&lt;T&gt; config(Class&lt;T&gt; type, String configValue) {</a>
<span class="sourceLineNo">423</span><a id="line.423">        return config(Key.get(type), configValue);</a>
<span class="sourceLineNo">424</span><a id="line.424">    }</a>
<span class="sourceLineNo">425</span><a id="line.425"></a>
<span class="sourceLineNo">426</span><a id="line.426">    @Deprecated</a>
<span class="sourceLineNo">427</span><a id="line.427">    private static class FilterConfigKey&lt;T extends PathMatchingFilter&gt; extends Key&lt;T&gt; {</a>
<span class="sourceLineNo">428</span><a id="line.428">        private Key&lt;T&gt; key;</a>
<span class="sourceLineNo">429</span><a id="line.429">        private String configValue;</a>
<span class="sourceLineNo">430</span><a id="line.430"></a>
<span class="sourceLineNo">431</span><a id="line.431">        private FilterConfigKey(Key&lt;T&gt; key, String configValue) {</a>
<span class="sourceLineNo">432</span><a id="line.432">            super();</a>
<span class="sourceLineNo">433</span><a id="line.433">            this.key = key;</a>
<span class="sourceLineNo">434</span><a id="line.434">            this.configValue = configValue;</a>
<span class="sourceLineNo">435</span><a id="line.435">        }</a>
<span class="sourceLineNo">436</span><a id="line.436"></a>
<span class="sourceLineNo">437</span><a id="line.437">        public Key&lt;T&gt; getKey() {</a>
<span class="sourceLineNo">438</span><a id="line.438">            return key;</a>
<span class="sourceLineNo">439</span><a id="line.439">        }</a>
<span class="sourceLineNo">440</span><a id="line.440"></a>
<span class="sourceLineNo">441</span><a id="line.441">        public String getConfigValue() {</a>
<span class="sourceLineNo">442</span><a id="line.442">            return configValue;</a>
<span class="sourceLineNo">443</span><a id="line.443">        }</a>
<span class="sourceLineNo">444</span><a id="line.444">    }</a>
<span class="sourceLineNo">445</span><a id="line.445"></a>
<span class="sourceLineNo">446</span><a id="line.446">}</a>




























































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