<!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.config.ShiroFilterConfiguration;</a>
<span class="sourceLineNo">033</span><a id="line.33">import org.apache.shiro.web.env.WebEnvironment;</a>
<span class="sourceLineNo">034</span><a id="line.34">import org.apache.shiro.web.filter.InvalidRequestFilter;</a>
<span class="sourceLineNo">035</span><a id="line.35">import org.apache.shiro.web.filter.PathMatchingFilter;</a>
<span class="sourceLineNo">036</span><a id="line.36">import org.apache.shiro.web.filter.authc.AnonymousFilter;</a>
<span class="sourceLineNo">037</span><a id="line.37">import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;</a>
<span class="sourceLineNo">038</span><a id="line.38">import org.apache.shiro.web.filter.authc.BearerHttpAuthenticationFilter;</a>
<span class="sourceLineNo">039</span><a id="line.39">import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;</a>
<span class="sourceLineNo">040</span><a id="line.40">import org.apache.shiro.web.filter.authc.LogoutFilter;</a>
<span class="sourceLineNo">041</span><a id="line.41">import org.apache.shiro.web.filter.authc.UserFilter;</a>
<span class="sourceLineNo">042</span><a id="line.42">import org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter;</a>
<span class="sourceLineNo">043</span><a id="line.43">import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;</a>
<span class="sourceLineNo">044</span><a id="line.44">import org.apache.shiro.web.filter.authz.PortFilter;</a>
<span class="sourceLineNo">045</span><a id="line.45">import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter;</a>
<span class="sourceLineNo">046</span><a id="line.46">import org.apache.shiro.web.filter.authz.SslFilter;</a>
<span class="sourceLineNo">047</span><a id="line.47">import org.apache.shiro.web.filter.mgt.FilterChainResolver;</a>
<span class="sourceLineNo">048</span><a id="line.48">import org.apache.shiro.web.filter.session.NoSessionCreationFilter;</a>
<span class="sourceLineNo">049</span><a id="line.49">import org.apache.shiro.web.mgt.DefaultWebSecurityManager;</a>
<span class="sourceLineNo">050</span><a id="line.50">import org.apache.shiro.web.mgt.WebSecurityManager;</a>
<span class="sourceLineNo">051</span><a id="line.51">import org.apache.shiro.web.session.mgt.ServletContainerSessionManager;</a>
<span class="sourceLineNo">052</span><a id="line.52"></a>
<span class="sourceLineNo">053</span><a id="line.53">import com.google.inject.Binder;</a>
<span class="sourceLineNo">054</span><a id="line.54">import com.google.inject.Key;</a>
<span class="sourceLineNo">055</span><a id="line.55">import com.google.inject.TypeLiteral;</a>
<span class="sourceLineNo">056</span><a id="line.56">import com.google.inject.binder.AnnotatedBindingBuilder;</a>
<span class="sourceLineNo">057</span><a id="line.57">import com.google.inject.name.Names;</a>
<span class="sourceLineNo">058</span><a id="line.58">import com.google.inject.servlet.ServletModule;</a>
<span class="sourceLineNo">059</span><a id="line.59"></a>
<span class="sourceLineNo">060</span><a id="line.60">/**</a>
<span class="sourceLineNo">061</span><a id="line.61"> * Sets up Shiro lifecycles within Guice, enables the injecting of Shiro objects, and binds a default</a>
<span class="sourceLineNo">062</span><a id="line.62"> * {@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">063</span><a id="line.63"> * using {@link #bindRealm() bindRealm}.</a>
<span class="sourceLineNo">064</span><a id="line.64"> * &lt;p/&gt;</a>
<span class="sourceLineNo">065</span><a id="line.65"> * 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">066</span><a id="line.66"> */</a>
<span class="sourceLineNo">067</span><a id="line.67">public abstract class ShiroWebModule extends ShiroModule {</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;AnonymousFilter&gt; ANON = Key.get(AnonymousFilter.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;FormAuthenticationFilter&gt; AUTHC = Key.get(FormAuthenticationFilter.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;BasicHttpAuthenticationFilter&gt; AUTHC_BASIC = Key.get(BasicHttpAuthenticationFilter.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;BearerHttpAuthenticationFilter&gt; AUTHC_BEARER = Key.get(BearerHttpAuthenticationFilter.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;NoSessionCreationFilter&gt; NO_SESSION_CREATION = Key.get(NoSessionCreationFilter.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;LogoutFilter&gt; LOGOUT = Key.get(LogoutFilter.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;PermissionsAuthorizationFilter&gt; PERMS = Key.get(PermissionsAuthorizationFilter.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;PortFilter&gt; PORT = Key.get(PortFilter.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;HttpMethodPermissionFilter&gt; REST = Key.get(HttpMethodPermissionFilter.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;RolesAuthorizationFilter&gt; ROLES = Key.get(RolesAuthorizationFilter.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;SslFilter&gt; SSL = Key.get(SslFilter.class);</a>
<span class="sourceLineNo">090</span><a id="line.90">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">091</span><a id="line.91">    public static final Key&lt;UserFilter&gt; USER = Key.get(UserFilter.class);</a>
<span class="sourceLineNo">092</span><a id="line.92">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">093</span><a id="line.93">    public static final Key&lt;InvalidRequestFilter&gt; INVALID_REQUEST = Key.get(InvalidRequestFilter.class);</a>
<span class="sourceLineNo">094</span><a id="line.94"></a>
<span class="sourceLineNo">095</span><a id="line.95">    static final String NAME = "SHIRO";</a>
<span class="sourceLineNo">096</span><a id="line.96"></a>
<span class="sourceLineNo">097</span><a id="line.97">    /**</a>
<span class="sourceLineNo">098</span><a id="line.98">     * 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">099</span><a id="line.99">     * FilterChainResolver uses iterator order when searching for a matching chain.</a>
<span class="sourceLineNo">100</span><a id="line.100">     */</a>
<span class="sourceLineNo">101</span><a id="line.101">    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">102</span><a id="line.102">    private final ServletContext servletContext;</a>
<span class="sourceLineNo">103</span><a id="line.103"></a>
<span class="sourceLineNo">104</span><a id="line.104">    public ShiroWebModule(ServletContext servletContext) {</a>
<span class="sourceLineNo">105</span><a id="line.105">        this.servletContext = servletContext;</a>
<span class="sourceLineNo">106</span><a id="line.106">    }</a>
<span class="sourceLineNo">107</span><a id="line.107"></a>
<span class="sourceLineNo">108</span><a id="line.108">    public static void bindGuiceFilter(Binder binder) {</a>
<span class="sourceLineNo">109</span><a id="line.109">        binder.install(guiceFilterModule());</a>
<span class="sourceLineNo">110</span><a id="line.110">    }</a>
<span class="sourceLineNo">111</span><a id="line.111"></a>
<span class="sourceLineNo">112</span><a id="line.112">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">113</span><a id="line.113">    public static void bindGuiceFilter(final String pattern, Binder binder) {</a>
<span class="sourceLineNo">114</span><a id="line.114">        binder.install(guiceFilterModule(pattern));</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">    public static ServletModule guiceFilterModule() {</a>
<span class="sourceLineNo">118</span><a id="line.118">        return guiceFilterModule("/*");</a>
<span class="sourceLineNo">119</span><a id="line.119">    }</a>
<span class="sourceLineNo">120</span><a id="line.120"></a>
<span class="sourceLineNo">121</span><a id="line.121">    public static ServletModule guiceFilterModule(final String pattern) {</a>
<span class="sourceLineNo">122</span><a id="line.122">        return new ServletModule() {</a>
<span class="sourceLineNo">123</span><a id="line.123">            @Override</a>
<span class="sourceLineNo">124</span><a id="line.124">            protected void configureServlets() {</a>
<span class="sourceLineNo">125</span><a id="line.125">                filter(pattern).through(GuiceShiroFilter.class);</a>
<span class="sourceLineNo">126</span><a id="line.126">            }</a>
<span class="sourceLineNo">127</span><a id="line.127">        };</a>
<span class="sourceLineNo">128</span><a id="line.128">    }</a>
<span class="sourceLineNo">129</span><a id="line.129"></a>
<span class="sourceLineNo">130</span><a id="line.130">    public List&lt;FilterConfig&lt;? extends Filter&gt;&gt; globalFilters() {</a>
<span class="sourceLineNo">131</span><a id="line.131">        return Collections.singletonList(filterConfig(INVALID_REQUEST));</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">    @Override</a>
<span class="sourceLineNo">135</span><a id="line.135">    protected final void configureShiro() {</a>
<span class="sourceLineNo">136</span><a id="line.136">        bindBeanType(TypeLiteral.get(ServletContext.class), Key.get(ServletContext.class, Names.named(NAME)));</a>
<span class="sourceLineNo">137</span><a id="line.137">        bind(Key.get(ServletContext.class, Names.named(NAME))).toInstance(this.servletContext);</a>
<span class="sourceLineNo">138</span><a id="line.138">        bindWebSecurityManager(bind(WebSecurityManager.class));</a>
<span class="sourceLineNo">139</span><a id="line.139">        bindShiroFilterConfiguration(bind(ShiroFilterConfiguration.class));</a>
<span class="sourceLineNo">140</span><a id="line.140">        bindWebEnvironment(bind(WebEnvironment.class));</a>
<span class="sourceLineNo">141</span><a id="line.141">        bind(GuiceShiroFilter.class).asEagerSingleton();</a>
<span class="sourceLineNo">142</span><a id="line.142">        expose(GuiceShiroFilter.class);</a>
<span class="sourceLineNo">143</span><a id="line.143"></a>
<span class="sourceLineNo">144</span><a id="line.144">        this.configureShiroWeb();</a>
<span class="sourceLineNo">145</span><a id="line.145"></a>
<span class="sourceLineNo">146</span><a id="line.146">        // add default matching route if not already set</a>
<span class="sourceLineNo">147</span><a id="line.147">        if (!filterChains.containsKey("/**")) {</a>
<span class="sourceLineNo">148</span><a id="line.148">            // no config, this will add only the global filters</a>
<span class="sourceLineNo">149</span><a id="line.149">            this.addFilterChain("/**", new FilterConfig[0]);</a>
<span class="sourceLineNo">150</span><a id="line.150">        }</a>
<span class="sourceLineNo">151</span><a id="line.151"></a>
<span class="sourceLineNo">152</span><a id="line.152">        bind(FilterChainResolver.class).toProvider(new FilterChainResolverProvider(setupFilterChainConfigs()));</a>
<span class="sourceLineNo">153</span><a id="line.153">    }</a>
<span class="sourceLineNo">154</span><a id="line.154"></a>
<span class="sourceLineNo">155</span><a id="line.155">    private Map&lt;String, Key&lt;? extends Filter&gt;[]&gt; setupFilterChainConfigs() {</a>
<span class="sourceLineNo">156</span><a id="line.156"></a>
<span class="sourceLineNo">157</span><a id="line.157">        // loop through and build a map of Filter Key -&gt; Map&lt;Path, Config&gt;</a>
<span class="sourceLineNo">158</span><a id="line.158">        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">159</span><a id="line.159"></a>
<span class="sourceLineNo">160</span><a id="line.160">        // At the same time build a map to return with Path -&gt; Key[]</a>
<span class="sourceLineNo">161</span><a id="line.161">        Map&lt;String, Key&lt;? extends Filter&gt;[]&gt; resultConfigMap = new LinkedHashMap&lt;String, Key&lt;? extends Filter&gt;[]&gt;();</a>
<span class="sourceLineNo">162</span><a id="line.162"></a>
<span class="sourceLineNo">163</span><a id="line.163">        for (Map.Entry&lt;String, FilterConfig&lt;? extends Filter&gt;[]&gt; filterChain : filterChains.entrySet()) {</a>
<span class="sourceLineNo">164</span><a id="line.164"></a>
<span class="sourceLineNo">165</span><a id="line.165">            String path = filterChain.getKey();</a>
<span class="sourceLineNo">166</span><a id="line.166"></a>
<span class="sourceLineNo">167</span><a id="line.167">            // collect the keys used for this path</a>
<span class="sourceLineNo">168</span><a id="line.168">            List&lt;Key&lt;? extends Filter&gt;&gt; keysForPath = new ArrayList&lt;Key&lt;? extends Filter&gt;&gt;();</a>
<span class="sourceLineNo">169</span><a id="line.169"></a>
<span class="sourceLineNo">170</span><a id="line.170">            List&lt;FilterConfig&lt;? extends Filter&gt;&gt; globalFilters = this.globalFilters();</a>
<span class="sourceLineNo">171</span><a id="line.171">            FilterConfig&lt;? extends Filter&gt;[] pathFilters = filterChain.getValue();</a>
<span class="sourceLineNo">172</span><a id="line.172"></a>
<span class="sourceLineNo">173</span><a id="line.173">            // merge the global filters and the path specific filters</a>
<span class="sourceLineNo">174</span><a id="line.174">            List&lt;FilterConfig&lt;? extends Filter&gt;&gt; filterConfigs = new ArrayList&lt;&gt;(globalFilters.size() + pathFilters.length);</a>
<span class="sourceLineNo">175</span><a id="line.175">            filterConfigs.addAll(globalFilters);</a>
<span class="sourceLineNo">176</span><a id="line.176">            filterConfigs.addAll(Arrays.asList(pathFilters));</a>
<span class="sourceLineNo">177</span><a id="line.177"></a>
<span class="sourceLineNo">178</span><a id="line.178">            for (FilterConfig&lt;? extends Filter&gt; filterConfig : filterConfigs) {</a>
<span class="sourceLineNo">179</span><a id="line.179"></a>
<span class="sourceLineNo">180</span><a id="line.180">                Key&lt;? extends Filter&gt; key = filterConfig.getKey();</a>
<span class="sourceLineNo">181</span><a id="line.181">                String config = filterConfig.getConfigValue();</a>
<span class="sourceLineNo">182</span><a id="line.182"></a>
<span class="sourceLineNo">183</span><a id="line.183">                // initialize key in filterToPathToConfig, if it doesn't exist</a>
<span class="sourceLineNo">184</span><a id="line.184">                if (filterToPathToConfig.get(key) == null) {</a>
<span class="sourceLineNo">185</span><a id="line.185">                        // Fix for SHIRO-621: REST filter bypassing matched path</a>
<span class="sourceLineNo">186</span><a id="line.186">                    filterToPathToConfig.put((key), new LinkedHashMap&lt;String, String&gt;());</a>
<span class="sourceLineNo">187</span><a id="line.187">                }</a>
<span class="sourceLineNo">188</span><a id="line.188">                // now set the value</a>
<span class="sourceLineNo">189</span><a id="line.189">                filterToPathToConfig.get(key).put(path, config);</a>
<span class="sourceLineNo">190</span><a id="line.190"></a>
<span class="sourceLineNo">191</span><a id="line.191">                // Config error if someone configured a non PathMatchingFilter with a config value</a>
<span class="sourceLineNo">192</span><a id="line.192">                if (StringUtils.hasText(config) &amp;&amp; !PathMatchingFilter.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {</a>
<span class="sourceLineNo">193</span><a id="line.193">                    throw new ConfigurationException("Config information requires a PathMatchingFilter - can't apply to " + key.getTypeLiteral().getRawType());</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">                // store the key in keysForPath</a>
<span class="sourceLineNo">197</span><a id="line.197">                keysForPath.add(key);</a>
<span class="sourceLineNo">198</span><a id="line.198">            }</a>
<span class="sourceLineNo">199</span><a id="line.199"></a>
<span class="sourceLineNo">200</span><a id="line.200">            // map the current path to all of its Keys</a>
<span class="sourceLineNo">201</span><a id="line.201">            resultConfigMap.put(path, keysForPath.toArray(new Key[keysForPath.size()]));</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">        // now we find only the PathMatchingFilter and configure bindings</a>
<span class="sourceLineNo">205</span><a id="line.205">        // non PathMatchingFilter, can be loaded with the default provider via the class name</a>
<span class="sourceLineNo">206</span><a id="line.206">        for (Key&lt;? extends Filter&gt; key : filterToPathToConfig.keySet()) {</a>
<span class="sourceLineNo">207</span><a id="line.207">            if (PathMatchingFilter.class.isAssignableFrom(key.getTypeLiteral().getRawType())) {</a>
<span class="sourceLineNo">208</span><a id="line.208">                bindPathMatchingFilter(castToPathMatching(key), filterToPathToConfig.get(key));</a>
<span class="sourceLineNo">209</span><a id="line.209">            }</a>
<span class="sourceLineNo">210</span><a id="line.210">            else {</a>
<span class="sourceLineNo">211</span><a id="line.211">                bind(key);</a>
<span class="sourceLineNo">212</span><a id="line.212">            }</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">        return resultConfigMap;</a>
<span class="sourceLineNo">216</span><a id="line.216">    }</a>
<span class="sourceLineNo">217</span><a id="line.217"></a>
<span class="sourceLineNo">218</span><a id="line.218"></a>
<span class="sourceLineNo">219</span><a id="line.219">    private &lt;T extends PathMatchingFilter&gt; void bindPathMatchingFilter(Key&lt;T&gt; filterKey, Map&lt;String, String&gt; configs) {</a>
<span class="sourceLineNo">220</span><a id="line.220">        bind(filterKey).toProvider(new PathMatchingFilterProvider&lt;T&gt;(filterKey, configs)).asEagerSingleton();</a>
<span class="sourceLineNo">221</span><a id="line.221">    }</a>
<span class="sourceLineNo">222</span><a id="line.222"></a>
<span class="sourceLineNo">223</span><a id="line.223">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">224</span><a id="line.224">    private Key&lt;? extends PathMatchingFilter&gt; castToPathMatching(Key&lt;? extends Filter&gt; key) {</a>
<span class="sourceLineNo">225</span><a id="line.225">        return (Key&lt;? extends PathMatchingFilter&gt;) key;</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">    protected abstract void configureShiroWeb();</a>
<span class="sourceLineNo">229</span><a id="line.229"></a>
<span class="sourceLineNo">230</span><a id="line.230">    @SuppressWarnings({"unchecked"})</a>
<span class="sourceLineNo">231</span><a id="line.231">    @Override</a>
<span class="sourceLineNo">232</span><a id="line.232">    protected final void bindSecurityManager(AnnotatedBindingBuilder&lt;? super SecurityManager&gt; bind) {</a>
<span class="sourceLineNo">233</span><a id="line.233">        bind.to(WebSecurityManager.class); // SHIRO-435</a>
<span class="sourceLineNo">234</span><a id="line.234">    }</a>
<span class="sourceLineNo">235</span><a id="line.235"></a>
<span class="sourceLineNo">236</span><a id="line.236">    /**</a>
<span class="sourceLineNo">237</span><a id="line.237">     * Binds the security manager.  Override this method in order to provide your own security manager binding.</a>
<span class="sourceLineNo">238</span><a id="line.238">     * &lt;p/&gt;</a>
<span class="sourceLineNo">239</span><a id="line.239">     * By default, a {@link org.apache.shiro.web.mgt.DefaultWebSecurityManager} is bound as an eager singleton.</a>
<span class="sourceLineNo">240</span><a id="line.240">     *</a>
<span class="sourceLineNo">241</span><a id="line.241">     * @param bind</a>
<span class="sourceLineNo">242</span><a id="line.242">     */</a>
<span class="sourceLineNo">243</span><a id="line.243">    protected void bindWebSecurityManager(AnnotatedBindingBuilder&lt;? super WebSecurityManager&gt; bind) {</a>
<span class="sourceLineNo">244</span><a id="line.244">        try {</a>
<span class="sourceLineNo">245</span><a id="line.245">            bind.toConstructor(DefaultWebSecurityManager.class.getConstructor(Collection.class)).asEagerSingleton();</a>
<span class="sourceLineNo">246</span><a id="line.246">        } catch (NoSuchMethodException e) {</a>
<span class="sourceLineNo">247</span><a id="line.247">            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">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"></a>
<span class="sourceLineNo">251</span><a id="line.251">    /**</a>
<span class="sourceLineNo">252</span><a id="line.252">     * Binds the Shiro Filter Configuration.  Override this method in order to provide your own Shiro Filter Configuration binding.</a>
<span class="sourceLineNo">253</span><a id="line.253">     * &lt;p/&gt;</a>
<span class="sourceLineNo">254</span><a id="line.254">     * By default, a {@link ShiroFilterConfiguration} is bound as an eager singleton.</a>
<span class="sourceLineNo">255</span><a id="line.255">     *</a>
<span class="sourceLineNo">256</span><a id="line.256">     * @param bind</a>
<span class="sourceLineNo">257</span><a id="line.257">     */</a>
<span class="sourceLineNo">258</span><a id="line.258">    protected void bindShiroFilterConfiguration(AnnotatedBindingBuilder&lt;? super ShiroFilterConfiguration&gt; bind) {</a>
<span class="sourceLineNo">259</span><a id="line.259">        bind.asEagerSingleton();</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">    /**</a>
<span class="sourceLineNo">263</span><a id="line.263">     * Binds the session manager.  Override this method in order to provide your own session manager binding.</a>
<span class="sourceLineNo">264</span><a id="line.264">     * &lt;p/&gt;</a>
<span class="sourceLineNo">265</span><a id="line.265">     * By default, a {@link org.apache.shiro.web.session.mgt.DefaultWebSessionManager} is bound as an eager singleton.</a>
<span class="sourceLineNo">266</span><a id="line.266">     *</a>
<span class="sourceLineNo">267</span><a id="line.267">     * @param bind</a>
<span class="sourceLineNo">268</span><a id="line.268">     */</a>
<span class="sourceLineNo">269</span><a id="line.269">    @Override</a>
<span class="sourceLineNo">270</span><a id="line.270">    protected void bindSessionManager(AnnotatedBindingBuilder&lt;SessionManager&gt; bind) {</a>
<span class="sourceLineNo">271</span><a id="line.271">        bind.to(ServletContainerSessionManager.class).asEagerSingleton();</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">    @Override</a>
<span class="sourceLineNo">275</span><a id="line.275">    protected final void bindEnvironment(AnnotatedBindingBuilder&lt;Environment&gt; bind) {</a>
<span class="sourceLineNo">276</span><a id="line.276">        bind.to(WebEnvironment.class); // SHIRO-435</a>
<span class="sourceLineNo">277</span><a id="line.277">    }</a>
<span class="sourceLineNo">278</span><a id="line.278"></a>
<span class="sourceLineNo">279</span><a id="line.279">    protected void bindWebEnvironment(AnnotatedBindingBuilder&lt;? super WebEnvironment&gt; bind) {</a>
<span class="sourceLineNo">280</span><a id="line.280">        bind.to(WebGuiceEnvironment.class).asEagerSingleton();</a>
<span class="sourceLineNo">281</span><a id="line.281">    }</a>
<span class="sourceLineNo">282</span><a id="line.282"></a>
<span class="sourceLineNo">283</span><a id="line.283">    protected final void addFilterChain(String pattern, Key&lt;? extends Filter&gt; key) {</a>
<span class="sourceLineNo">284</span><a id="line.284">        // check for legacy API</a>
<span class="sourceLineNo">285</span><a id="line.285">        if (key instanceof FilterConfigKey) {</a>
<span class="sourceLineNo">286</span><a id="line.286">            addLegacyFilterChain(pattern, (FilterConfigKey) key);</a>
<span class="sourceLineNo">287</span><a id="line.287">        }</a>
<span class="sourceLineNo">288</span><a id="line.288">        else {</a>
<span class="sourceLineNo">289</span><a id="line.289">            addFilterChain(pattern, new FilterConfig&lt;Filter&gt;((Key&lt;Filter&gt;) key, ""));</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">    /**</a>
<span class="sourceLineNo">294</span><a id="line.294">     * Maps 'n' number of &lt;code&gt;filterConfig&lt;/code&gt;s to a specific path pattern.&lt;BR/&gt;</a>
<span class="sourceLineNo">295</span><a id="line.295">     * For example, a path of '/my_private_resource/**' to 'filterConfig(AUTHC)' would require</a>
<span class="sourceLineNo">296</span><a id="line.296">     * any resource under the path '/my_private_resource' would be processed through the {@link FormAuthenticationFilter}.</a>
<span class="sourceLineNo">297</span><a id="line.297">     *</a>
<span class="sourceLineNo">298</span><a id="line.298">     * @param pattern URL patter to be mapped to a FilterConfig, e.g. '/my_private-path/**'</a>
<span class="sourceLineNo">299</span><a id="line.299">     * @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">300</span><a id="line.300">     * @since 1.4</a>
<span class="sourceLineNo">301</span><a id="line.301">     */</a>
<span class="sourceLineNo">302</span><a id="line.302">    protected final void addFilterChain(String pattern, FilterConfig&lt;? extends Filter&gt;... filterConfigs) {</a>
<span class="sourceLineNo">303</span><a id="line.303">        filterChains.put(pattern, filterConfigs);</a>
<span class="sourceLineNo">304</span><a id="line.304">    }</a>
<span class="sourceLineNo">305</span><a id="line.305"></a>
<span class="sourceLineNo">306</span><a id="line.306">    /**</a>
<span class="sourceLineNo">307</span><a id="line.307">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">308</span><a id="line.308">     * @param baseKey The Key of the Filter class to be used.</a>
<span class="sourceLineNo">309</span><a id="line.309">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">310</span><a id="line.310">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">311</span><a id="line.311">     * @since 1.4</a>
<span class="sourceLineNo">312</span><a id="line.312">     */</a>
<span class="sourceLineNo">313</span><a id="line.313">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(Key&lt;T&gt; baseKey, String configValue) {</a>
<span class="sourceLineNo">314</span><a id="line.314">        return new FilterConfig&lt;T&gt;(baseKey, configValue);</a>
<span class="sourceLineNo">315</span><a id="line.315">    }</a>
<span class="sourceLineNo">316</span><a id="line.316"></a>
<span class="sourceLineNo">317</span><a id="line.317">    /**</a>
<span class="sourceLineNo">318</span><a id="line.318">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">319</span><a id="line.319">     * @param baseKey The Key of the Filter class to be used.</a>
<span class="sourceLineNo">320</span><a id="line.320">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">321</span><a id="line.321">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">322</span><a id="line.322">     * @since 1.4</a>
<span class="sourceLineNo">323</span><a id="line.323">     */</a>
<span class="sourceLineNo">324</span><a id="line.324">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(Key&lt;T&gt; baseKey) {</a>
<span class="sourceLineNo">325</span><a id="line.325">        return filterConfig(baseKey, "");</a>
<span class="sourceLineNo">326</span><a id="line.326">    }</a>
<span class="sourceLineNo">327</span><a id="line.327"></a>
<span class="sourceLineNo">328</span><a id="line.328">    /**</a>
<span class="sourceLineNo">329</span><a id="line.329">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">330</span><a id="line.330">     * @param typeLiteral The TyleLiteral of the filter key to be used.</a>
<span class="sourceLineNo">331</span><a id="line.331">     * @param configValue the configuration used.</a>
<span class="sourceLineNo">332</span><a id="line.332">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">333</span><a id="line.333">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">334</span><a id="line.334">     * @since 1.4</a>
<span class="sourceLineNo">335</span><a id="line.335">     */</a>
<span class="sourceLineNo">336</span><a id="line.336">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">337</span><a id="line.337">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(TypeLiteral&lt;T&gt; typeLiteral, String configValue) {</a>
<span class="sourceLineNo">338</span><a id="line.338">        return filterConfig(Key.get(typeLiteral), configValue);</a>
<span class="sourceLineNo">339</span><a id="line.339">    }</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">     * Builds a FilterConfig from a Filer and configuration String</a>
<span class="sourceLineNo">343</span><a id="line.343">     * @param type The filter to be used.</a>
<span class="sourceLineNo">344</span><a id="line.344">     * @param configValue the configuration used.</a>
<span class="sourceLineNo">345</span><a id="line.345">     * @param &lt;T&gt; A Servlet Filter class.</a>
<span class="sourceLineNo">346</span><a id="line.346">     * @return A FilterConfig used to map a String path to this configuration.</a>
<span class="sourceLineNo">347</span><a id="line.347">     * @since 1.4</a>
<span class="sourceLineNo">348</span><a id="line.348">     */</a>
<span class="sourceLineNo">349</span><a id="line.349">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">350</span><a id="line.350">    protected static &lt;T extends Filter&gt; FilterConfig&lt;T&gt; filterConfig(Class&lt;T&gt; type, String configValue) {</a>
<span class="sourceLineNo">351</span><a id="line.351">        return filterConfig(Key.get(type), configValue);</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">     * Filter configuration which pairs a Filter class with its configuration used on a path.</a>
<span class="sourceLineNo">357</span><a id="line.357">     * @param &lt;T&gt; The Servlet Filter class.</a>
<span class="sourceLineNo">358</span><a id="line.358">     * @since 1.4</a>
<span class="sourceLineNo">359</span><a id="line.359">     */</a>
<span class="sourceLineNo">360</span><a id="line.360">    public static class FilterConfig&lt;T extends Filter&gt; {</a>
<span class="sourceLineNo">361</span><a id="line.361">        private Key&lt;T&gt; key;</a>
<span class="sourceLineNo">362</span><a id="line.362">        private String configValue;</a>
<span class="sourceLineNo">363</span><a id="line.363"></a>
<span class="sourceLineNo">364</span><a id="line.364">        private FilterConfig(Key&lt;T&gt; key, String configValue) {</a>
<span class="sourceLineNo">365</span><a id="line.365">            super();</a>
<span class="sourceLineNo">366</span><a id="line.366">            this.key = key;</a>
<span class="sourceLineNo">367</span><a id="line.367">            this.configValue = configValue;</a>
<span class="sourceLineNo">368</span><a id="line.368">        }</a>
<span class="sourceLineNo">369</span><a id="line.369"></a>
<span class="sourceLineNo">370</span><a id="line.370">        public Key&lt;T&gt; getKey() {</a>
<span class="sourceLineNo">371</span><a id="line.371">            return key;</a>
<span class="sourceLineNo">372</span><a id="line.372">        }</a>
<span class="sourceLineNo">373</span><a id="line.373"></a>
<span class="sourceLineNo">374</span><a id="line.374">        public String getConfigValue() {</a>
<span class="sourceLineNo">375</span><a id="line.375">            return configValue;</a>
<span class="sourceLineNo">376</span><a id="line.376">        }</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"></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"></a>
<span class="sourceLineNo">384</span><a id="line.384"></a>
<span class="sourceLineNo">385</span><a id="line.385">    // legacy methods</a>
<span class="sourceLineNo">386</span><a id="line.386"></a>
<span class="sourceLineNo">387</span><a id="line.387"></a>
<span class="sourceLineNo">388</span><a id="line.388">    static boolean isGuiceVersion3() {</a>
<span class="sourceLineNo">389</span><a id="line.389">        try {</a>
<span class="sourceLineNo">390</span><a id="line.390">            Class.forName("com.google.inject.multibindings.MapKey");</a>
<span class="sourceLineNo">391</span><a id="line.391">            return false;</a>
<span class="sourceLineNo">392</span><a id="line.392">        } catch (ClassNotFoundException e) {</a>
<span class="sourceLineNo">393</span><a id="line.393">            return true;</a>
<span class="sourceLineNo">394</span><a id="line.394">        }</a>
<span class="sourceLineNo">395</span><a id="line.395">    }</a>
<span class="sourceLineNo">396</span><a id="line.396"></a>
<span class="sourceLineNo">397</span><a id="line.397">    private void addLegacyFilterChain(String pattern, FilterConfigKey filterConfigKey) {</a>
<span class="sourceLineNo">398</span><a id="line.398"></a>
<span class="sourceLineNo">399</span><a id="line.399">        FilterConfig&lt;Filter&gt; filterConfig = new FilterConfig&lt;Filter&gt;(filterConfigKey.getKey(), filterConfigKey.getConfigValue());</a>
<span class="sourceLineNo">400</span><a id="line.400">        addFilterChain(pattern, filterConfig);</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">    /**</a>
<span class="sourceLineNo">404</span><a id="line.404">     * Adds a filter chain to the shiro configuration.</a>
<span class="sourceLineNo">405</span><a id="line.405">     * &lt;p/&gt;</a>
<span class="sourceLineNo">406</span><a id="line.406">     * 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">407</span><a id="line.407">     * provider.</a>
<span class="sourceLineNo">408</span><a id="line.408">     *</a>
<span class="sourceLineNo">409</span><a id="line.409">     * @param pattern</a>
<span class="sourceLineNo">410</span><a id="line.410">     * @param keys</a>
<span class="sourceLineNo">411</span><a id="line.411">     */</a>
<span class="sourceLineNo">412</span><a id="line.412">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">413</span><a id="line.413">    @Deprecated</a>
<span class="sourceLineNo">414</span><a id="line.414">    protected final void addFilterChain(String pattern, Key&lt;? extends Filter&gt;... keys) {</a>
<span class="sourceLineNo">415</span><a id="line.415"></a>
<span class="sourceLineNo">416</span><a id="line.416">        // We need to extract the keys and FilterConfigKey and convert to the new format.</a>
<span class="sourceLineNo">417</span><a id="line.417"></a>
<span class="sourceLineNo">418</span><a id="line.418">        FilterConfig[] filterConfigs = new FilterConfig[keys.length];</a>
<span class="sourceLineNo">419</span><a id="line.419">        for (int ii = 0; ii &lt; keys.length; ii++) {</a>
<span class="sourceLineNo">420</span><a id="line.420">            Key&lt;? extends Filter&gt; key = keys[ii];</a>
<span class="sourceLineNo">421</span><a id="line.421">            // If this is a path matching filter, we need to remember the config</a>
<span class="sourceLineNo">422</span><a id="line.422">            if (key instanceof FilterConfigKey) {</a>
<span class="sourceLineNo">423</span><a id="line.423">                // legacy config</a>
<span class="sourceLineNo">424</span><a id="line.424">                FilterConfigKey legacyKey = (FilterConfigKey) key;</a>
<span class="sourceLineNo">425</span><a id="line.425">                filterConfigs[ii] = new FilterConfig(legacyKey.getKey(), legacyKey.getConfigValue());</a>
<span class="sourceLineNo">426</span><a id="line.426">            }</a>
<span class="sourceLineNo">427</span><a id="line.427">            else {</a>
<span class="sourceLineNo">428</span><a id="line.428">                // Some other type of Filter key, no config</a>
<span class="sourceLineNo">429</span><a id="line.429">                filterConfigs[ii] = new FilterConfig(key, "");</a>
<span class="sourceLineNo">430</span><a id="line.430">            }</a>
<span class="sourceLineNo">431</span><a id="line.431">        }</a>
<span class="sourceLineNo">432</span><a id="line.432"></a>
<span class="sourceLineNo">433</span><a id="line.433">        filterChains.put(pattern, filterConfigs);</a>
<span class="sourceLineNo">434</span><a id="line.434">    }</a>
<span class="sourceLineNo">435</span><a id="line.435"></a>
<span class="sourceLineNo">436</span><a id="line.436">    @Deprecated</a>
<span class="sourceLineNo">437</span><a id="line.437">    protected static &lt;T extends PathMatchingFilter&gt; Key&lt;T&gt; config(Key&lt;T&gt; baseKey, String configValue) {</a>
<span class="sourceLineNo">438</span><a id="line.438"></a>
<span class="sourceLineNo">439</span><a id="line.439">        if( !isGuiceVersion3()) {</a>
<span class="sourceLineNo">440</span><a id="line.440">            throw new ConfigurationException("Method ShiroWebModule.config(Key&lt;? extends PathMatchingFilter&gt;, String configValue), is not supported when using Guice 4+");</a>
<span class="sourceLineNo">441</span><a id="line.441">        }</a>
<span class="sourceLineNo">442</span><a id="line.442"></a>
<span class="sourceLineNo">443</span><a id="line.443">        return new FilterConfigKey&lt;T&gt;(baseKey, configValue);</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">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">447</span><a id="line.447">    @Deprecated</a>
<span class="sourceLineNo">448</span><a id="line.448">    protected static &lt;T extends PathMatchingFilter&gt; Key&lt;T&gt; config(TypeLiteral&lt;T&gt; typeLiteral, String configValue) {</a>
<span class="sourceLineNo">449</span><a id="line.449">        return config(Key.get(typeLiteral), configValue);</a>
<span class="sourceLineNo">450</span><a id="line.450">    }</a>
<span class="sourceLineNo">451</span><a id="line.451"></a>
<span class="sourceLineNo">452</span><a id="line.452">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">453</span><a id="line.453">    @Deprecated</a>
<span class="sourceLineNo">454</span><a id="line.454">    protected static &lt;T extends PathMatchingFilter&gt; Key&lt;T&gt; config(Class&lt;T&gt; type, String configValue) {</a>
<span class="sourceLineNo">455</span><a id="line.455">        return config(Key.get(type), configValue);</a>
<span class="sourceLineNo">456</span><a id="line.456">    }</a>
<span class="sourceLineNo">457</span><a id="line.457"></a>
<span class="sourceLineNo">458</span><a id="line.458">    @Deprecated</a>
<span class="sourceLineNo">459</span><a id="line.459">    private static class FilterConfigKey&lt;T extends PathMatchingFilter&gt; extends Key&lt;T&gt; {</a>
<span class="sourceLineNo">460</span><a id="line.460">        private Key&lt;T&gt; key;</a>
<span class="sourceLineNo">461</span><a id="line.461">        private String configValue;</a>
<span class="sourceLineNo">462</span><a id="line.462"></a>
<span class="sourceLineNo">463</span><a id="line.463">        private FilterConfigKey(Key&lt;T&gt; key, String configValue) {</a>
<span class="sourceLineNo">464</span><a id="line.464">            super();</a>
<span class="sourceLineNo">465</span><a id="line.465">            this.key = key;</a>
<span class="sourceLineNo">466</span><a id="line.466">            this.configValue = configValue;</a>
<span class="sourceLineNo">467</span><a id="line.467">        }</a>
<span class="sourceLineNo">468</span><a id="line.468"></a>
<span class="sourceLineNo">469</span><a id="line.469">        public Key&lt;T&gt; getKey() {</a>
<span class="sourceLineNo">470</span><a id="line.470">            return key;</a>
<span class="sourceLineNo">471</span><a id="line.471">        }</a>
<span class="sourceLineNo">472</span><a id="line.472"></a>
<span class="sourceLineNo">473</span><a id="line.473">        public String getConfigValue() {</a>
<span class="sourceLineNo">474</span><a id="line.474">            return configValue;</a>
<span class="sourceLineNo">475</span><a id="line.475">        }</a>
<span class="sourceLineNo">476</span><a id="line.476">    }</a>
<span class="sourceLineNo">477</span><a id="line.477"></a>
<span class="sourceLineNo">478</span><a id="line.478">}</a>




























































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