<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.web.servlet;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.SecurityUtils;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.session.Session;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.subject.ExecutionException;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.subject.Subject;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.web.config.ShiroFilterConfiguration;</a>
<span class="sourceLineNo">026</span><a id="line.26">import org.apache.shiro.web.filter.mgt.FilterChainResolver;</a>
<span class="sourceLineNo">027</span><a id="line.27">import org.apache.shiro.web.mgt.DefaultWebSecurityManager;</a>
<span class="sourceLineNo">028</span><a id="line.28">import org.apache.shiro.web.mgt.WebSecurityManager;</a>
<span class="sourceLineNo">029</span><a id="line.29">import org.apache.shiro.web.subject.WebSubject;</a>
<span class="sourceLineNo">030</span><a id="line.30">import org.slf4j.Logger;</a>
<span class="sourceLineNo">031</span><a id="line.31">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">032</span><a id="line.32"></a>
<span class="sourceLineNo">033</span><a id="line.33">import javax.servlet.FilterChain;</a>
<span class="sourceLineNo">034</span><a id="line.34">import javax.servlet.ServletException;</a>
<span class="sourceLineNo">035</span><a id="line.35">import javax.servlet.ServletRequest;</a>
<span class="sourceLineNo">036</span><a id="line.36">import javax.servlet.ServletResponse;</a>
<span class="sourceLineNo">037</span><a id="line.37">import javax.servlet.http.HttpServletRequest;</a>
<span class="sourceLineNo">038</span><a id="line.38">import javax.servlet.http.HttpServletResponse;</a>
<span class="sourceLineNo">039</span><a id="line.39">import java.io.IOException;</a>
<span class="sourceLineNo">040</span><a id="line.40">import java.util.concurrent.Callable;</a>
<span class="sourceLineNo">041</span><a id="line.41"></a>
<span class="sourceLineNo">042</span><a id="line.42">/**</a>
<span class="sourceLineNo">043</span><a id="line.43"> * Abstract base class that provides all standard Shiro request filtering behavior and expects</a>
<span class="sourceLineNo">044</span><a id="line.44"> * subclasses to implement configuration-specific logic (INI, XML, .properties, etc).</a>
<span class="sourceLineNo">045</span><a id="line.45"> * &lt;p/&gt;</a>
<span class="sourceLineNo">046</span><a id="line.46"> * Subclasses should perform configuration and construction logic in an overridden</a>
<span class="sourceLineNo">047</span><a id="line.47"> * {@link #init()} method implementation.  That implementation should make available any constructed</a>
<span class="sourceLineNo">048</span><a id="line.48"> * {@code SecurityManager} and {@code FilterChainResolver} by calling</a>
<span class="sourceLineNo">049</span><a id="line.49"> * {@link #setSecurityManager(org.apache.shiro.web.mgt.WebSecurityManager)} and</a>
<span class="sourceLineNo">050</span><a id="line.50"> * {@link #setFilterChainResolver(org.apache.shiro.web.filter.mgt.FilterChainResolver)} methods respectively.</a>
<span class="sourceLineNo">051</span><a id="line.51"> * &lt;h3&gt;Static SecurityManager&lt;/h3&gt;</a>
<span class="sourceLineNo">052</span><a id="line.52"> * By default the {@code SecurityManager} instance enabled by this filter &lt;em&gt;will not&lt;/em&gt; be enabled in static</a>
<span class="sourceLineNo">053</span><a id="line.53"> * memory via the {@code SecurityUtils.}{@link SecurityUtils#setSecurityManager(org.apache.shiro.mgt.SecurityManager) setSecurityManager}</a>
<span class="sourceLineNo">054</span><a id="line.54"> * method.  Instead, it is expected that Subject instances will always be constructed on a request-processing thread</a>
<span class="sourceLineNo">055</span><a id="line.55"> * via instances of this Filter class.</a>
<span class="sourceLineNo">056</span><a id="line.56"> * &lt;p/&gt;</a>
<span class="sourceLineNo">057</span><a id="line.57"> * However, if you need to construct {@code Subject} instances on separate (non request-processing) threads, it might</a>
<span class="sourceLineNo">058</span><a id="line.58"> * be easiest to enable the SecurityManager to be available in static memory via the</a>
<span class="sourceLineNo">059</span><a id="line.59"> * {@link SecurityUtils#getSecurityManager()} method.  You can do this by additionally specifying an {@code init-param}:</a>
<span class="sourceLineNo">060</span><a id="line.60"> * &lt;pre&gt;</a>
<span class="sourceLineNo">061</span><a id="line.61"> * &amp;lt;filter&amp;gt;</a>
<span class="sourceLineNo">062</span><a id="line.62"> *     ... other config here ...</a>
<span class="sourceLineNo">063</span><a id="line.63"> *     &amp;lt;init-param&amp;gt;</a>
<span class="sourceLineNo">064</span><a id="line.64"> *         &amp;lt;param-name&amp;gt;staticSecurityManagerEnabled&amp;lt;/param-name&amp;gt;</a>
<span class="sourceLineNo">065</span><a id="line.65"> *         &amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;</a>
<span class="sourceLineNo">066</span><a id="line.66"> *     &amp;lt;/init-param&amp;gt;</a>
<span class="sourceLineNo">067</span><a id="line.67"> * &amp;lt;/filter&amp;gt;</a>
<span class="sourceLineNo">068</span><a id="line.68"> * &lt;/pre&gt;</a>
<span class="sourceLineNo">069</span><a id="line.69"> * See the Shiro &lt;a href="http://shiro.apache.org/subject.html"&gt;Subject documentation&lt;/a&gt; for more information as to</a>
<span class="sourceLineNo">070</span><a id="line.70"> * if you would do this, particularly the sections on the {@code Subject.Builder} and Thread Association.</a>
<span class="sourceLineNo">071</span><a id="line.71"> *</a>
<span class="sourceLineNo">072</span><a id="line.72"> * @since 1.0</a>
<span class="sourceLineNo">073</span><a id="line.73"> * @see &lt;a href="http://shiro.apache.org/subject.html"&gt;Subject documentation&lt;/a&gt;</a>
<span class="sourceLineNo">074</span><a id="line.74"> */</a>
<span class="sourceLineNo">075</span><a id="line.75">public abstract class AbstractShiroFilter extends OncePerRequestFilter {</a>
<span class="sourceLineNo">076</span><a id="line.76"></a>
<span class="sourceLineNo">077</span><a id="line.77">    private static final Logger log = LoggerFactory.getLogger(AbstractShiroFilter.class);</a>
<span class="sourceLineNo">078</span><a id="line.78"></a>
<span class="sourceLineNo">079</span><a id="line.79">    private static final String STATIC_INIT_PARAM_NAME = "staticSecurityManagerEnabled";</a>
<span class="sourceLineNo">080</span><a id="line.80"></a>
<span class="sourceLineNo">081</span><a id="line.81">    // Reference to the security manager used by this filter</a>
<span class="sourceLineNo">082</span><a id="line.82">    private WebSecurityManager securityManager;</a>
<span class="sourceLineNo">083</span><a id="line.83"></a>
<span class="sourceLineNo">084</span><a id="line.84">    // Used to determine which chain should handle an incoming request/response</a>
<span class="sourceLineNo">085</span><a id="line.85">    private FilterChainResolver filterChainResolver;</a>
<span class="sourceLineNo">086</span><a id="line.86"></a>
<span class="sourceLineNo">087</span><a id="line.87">    /**</a>
<span class="sourceLineNo">088</span><a id="line.88">     * Whether or not to bind the constructed SecurityManager instance to static memory (via</a>
<span class="sourceLineNo">089</span><a id="line.89">     * SecurityUtils.setSecurityManager).  This was added to support https://issues.apache.org/jira/browse/SHIRO-287</a>
<span class="sourceLineNo">090</span><a id="line.90">     * @since 1.2</a>
<span class="sourceLineNo">091</span><a id="line.91">     */</a>
<span class="sourceLineNo">092</span><a id="line.92">    private boolean staticSecurityManagerEnabled;</a>
<span class="sourceLineNo">093</span><a id="line.93"></a>
<span class="sourceLineNo">094</span><a id="line.94">    protected AbstractShiroFilter() {</a>
<span class="sourceLineNo">095</span><a id="line.95">        this.staticSecurityManagerEnabled = false;</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">    public WebSecurityManager getSecurityManager() {</a>
<span class="sourceLineNo">099</span><a id="line.99">        return securityManager;</a>
<span class="sourceLineNo">100</span><a id="line.100">    }</a>
<span class="sourceLineNo">101</span><a id="line.101"></a>
<span class="sourceLineNo">102</span><a id="line.102">    public void setSecurityManager(WebSecurityManager sm) {</a>
<span class="sourceLineNo">103</span><a id="line.103">        this.securityManager = sm;</a>
<span class="sourceLineNo">104</span><a id="line.104">    }</a>
<span class="sourceLineNo">105</span><a id="line.105"></a>
<span class="sourceLineNo">106</span><a id="line.106">    public FilterChainResolver getFilterChainResolver() {</a>
<span class="sourceLineNo">107</span><a id="line.107">        return filterChainResolver;</a>
<span class="sourceLineNo">108</span><a id="line.108">    }</a>
<span class="sourceLineNo">109</span><a id="line.109"></a>
<span class="sourceLineNo">110</span><a id="line.110">    public void setFilterChainResolver(FilterChainResolver filterChainResolver) {</a>
<span class="sourceLineNo">111</span><a id="line.111">        this.filterChainResolver = filterChainResolver;</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 void setShiroFilterConfiguration(ShiroFilterConfiguration config) {</a>
<span class="sourceLineNo">115</span><a id="line.115">        this.setFilterOncePerRequest(config.isFilterOncePerRequest());</a>
<span class="sourceLineNo">116</span><a id="line.116"></a>
<span class="sourceLineNo">117</span><a id="line.117">        // this property could have already been set with a servlet config param</a>
<span class="sourceLineNo">118</span><a id="line.118">        this.setStaticSecurityManagerEnabled(config.isStaticSecurityManagerEnabled() || isStaticSecurityManagerEnabled());</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">    /**</a>
<span class="sourceLineNo">122</span><a id="line.122">     * Returns {@code true} if the constructed {@link #getSecurityManager() securityManager} reference should be bound</a>
<span class="sourceLineNo">123</span><a id="line.123">     * to static memory (via</a>
<span class="sourceLineNo">124</span><a id="line.124">     * {@code SecurityUtils.}{@link SecurityUtils#setSecurityManager(org.apache.shiro.mgt.SecurityManager) setSecurityManager}),</a>
<span class="sourceLineNo">125</span><a id="line.125">     * {@code false} otherwise.</a>
<span class="sourceLineNo">126</span><a id="line.126">     * &lt;p/&gt;</a>
<span class="sourceLineNo">127</span><a id="line.127">     * The default value is {@code false}.</a>
<span class="sourceLineNo">128</span><a id="line.128">     * &lt;p/&gt;</a>
<span class="sourceLineNo">129</span><a id="line.129">     *</a>
<span class="sourceLineNo">130</span><a id="line.130">     *</a>
<span class="sourceLineNo">131</span><a id="line.131">     * @return {@code true} if the constructed {@link #getSecurityManager() securityManager} reference should be bound</a>
<span class="sourceLineNo">132</span><a id="line.132">     *         to static memory (via {@code SecurityUtils.}{@link SecurityUtils#setSecurityManager(org.apache.shiro.mgt.SecurityManager) setSecurityManager}),</a>
<span class="sourceLineNo">133</span><a id="line.133">     *         {@code false} otherwise.</a>
<span class="sourceLineNo">134</span><a id="line.134">     * @since 1.2</a>
<span class="sourceLineNo">135</span><a id="line.135">     * @see &lt;a href="https://issues.apache.org/jira/browse/SHIRO-287"&gt;SHIRO-287&lt;/a&gt;</a>
<span class="sourceLineNo">136</span><a id="line.136">     */</a>
<span class="sourceLineNo">137</span><a id="line.137">    public boolean isStaticSecurityManagerEnabled() {</a>
<span class="sourceLineNo">138</span><a id="line.138">        return staticSecurityManagerEnabled;</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">    /**</a>
<span class="sourceLineNo">142</span><a id="line.142">     * Sets if the constructed {@link #getSecurityManager() securityManager} reference should be bound</a>
<span class="sourceLineNo">143</span><a id="line.143">     * to static memory (via {@code SecurityUtils.}{@link SecurityUtils#setSecurityManager(org.apache.shiro.mgt.SecurityManager) setSecurityManager}).</a>
<span class="sourceLineNo">144</span><a id="line.144">     * &lt;p/&gt;</a>
<span class="sourceLineNo">145</span><a id="line.145">     * The default value is {@code false}.</a>
<span class="sourceLineNo">146</span><a id="line.146">     *</a>
<span class="sourceLineNo">147</span><a id="line.147">     * @param staticSecurityManagerEnabled if the constructed {@link #getSecurityManager() securityManager} reference</a>
<span class="sourceLineNo">148</span><a id="line.148">     *                                       should be bound to static memory (via</a>
<span class="sourceLineNo">149</span><a id="line.149">     *                                       {@code SecurityUtils.}{@link SecurityUtils#setSecurityManager(org.apache.shiro.mgt.SecurityManager) setSecurityManager}).</a>
<span class="sourceLineNo">150</span><a id="line.150">     * @since 1.2</a>
<span class="sourceLineNo">151</span><a id="line.151">     * @see &lt;a href="https://issues.apache.org/jira/browse/SHIRO-287"&gt;SHIRO-287&lt;/a&gt;</a>
<span class="sourceLineNo">152</span><a id="line.152">     */</a>
<span class="sourceLineNo">153</span><a id="line.153">    public void setStaticSecurityManagerEnabled(boolean staticSecurityManagerEnabled) {</a>
<span class="sourceLineNo">154</span><a id="line.154">        this.staticSecurityManagerEnabled = staticSecurityManagerEnabled;</a>
<span class="sourceLineNo">155</span><a id="line.155">    }</a>
<span class="sourceLineNo">156</span><a id="line.156"></a>
<span class="sourceLineNo">157</span><a id="line.157">    protected final void onFilterConfigSet() throws Exception {</a>
<span class="sourceLineNo">158</span><a id="line.158">        //added in 1.2 for SHIRO-287:</a>
<span class="sourceLineNo">159</span><a id="line.159">        applyStaticSecurityManagerEnabledConfig();</a>
<span class="sourceLineNo">160</span><a id="line.160">        init();</a>
<span class="sourceLineNo">161</span><a id="line.161">        ensureSecurityManager();</a>
<span class="sourceLineNo">162</span><a id="line.162">        //added in 1.2 for SHIRO-287:</a>
<span class="sourceLineNo">163</span><a id="line.163">        if (isStaticSecurityManagerEnabled()) {</a>
<span class="sourceLineNo">164</span><a id="line.164">            SecurityUtils.setSecurityManager(getSecurityManager());</a>
<span class="sourceLineNo">165</span><a id="line.165">        }</a>
<span class="sourceLineNo">166</span><a id="line.166">    }</a>
<span class="sourceLineNo">167</span><a id="line.167"></a>
<span class="sourceLineNo">168</span><a id="line.168">    /**</a>
<span class="sourceLineNo">169</span><a id="line.169">     * Checks if the init-param that configures the filter to use static memory has been configured, and if so,</a>
<span class="sourceLineNo">170</span><a id="line.170">     * sets the {@link #setStaticSecurityManagerEnabled(boolean)} attribute with the configured value.</a>
<span class="sourceLineNo">171</span><a id="line.171">     *</a>
<span class="sourceLineNo">172</span><a id="line.172">     * @since 1.2</a>
<span class="sourceLineNo">173</span><a id="line.173">     * @see &lt;a href="https://issues.apache.org/jira/browse/SHIRO-287"&gt;SHIRO-287&lt;/a&gt;</a>
<span class="sourceLineNo">174</span><a id="line.174">     */</a>
<span class="sourceLineNo">175</span><a id="line.175">    private void applyStaticSecurityManagerEnabledConfig() {</a>
<span class="sourceLineNo">176</span><a id="line.176">        String value = getInitParam(STATIC_INIT_PARAM_NAME);</a>
<span class="sourceLineNo">177</span><a id="line.177">        if (value != null) {</a>
<span class="sourceLineNo">178</span><a id="line.178">            Boolean b = Boolean.valueOf(value);</a>
<span class="sourceLineNo">179</span><a id="line.179">            if (b != null) {</a>
<span class="sourceLineNo">180</span><a id="line.180">                setStaticSecurityManagerEnabled(b);</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">    }</a>
<span class="sourceLineNo">184</span><a id="line.184"></a>
<span class="sourceLineNo">185</span><a id="line.185">    public void init() throws Exception {</a>
<span class="sourceLineNo">186</span><a id="line.186">    }</a>
<span class="sourceLineNo">187</span><a id="line.187"></a>
<span class="sourceLineNo">188</span><a id="line.188">    /**</a>
<span class="sourceLineNo">189</span><a id="line.189">     * A fallback mechanism called in {@link #onFilterConfigSet()} to ensure that the</a>
<span class="sourceLineNo">190</span><a id="line.190">     * {@link #getSecurityManager() securityManager} property has been set by configuration, and if not,</a>
<span class="sourceLineNo">191</span><a id="line.191">     * creates one automatically.</a>
<span class="sourceLineNo">192</span><a id="line.192">     */</a>
<span class="sourceLineNo">193</span><a id="line.193">    private void ensureSecurityManager() {</a>
<span class="sourceLineNo">194</span><a id="line.194">        WebSecurityManager securityManager = getSecurityManager();</a>
<span class="sourceLineNo">195</span><a id="line.195">        if (securityManager == null) {</a>
<span class="sourceLineNo">196</span><a id="line.196">            log.info("No SecurityManager configured.  Creating default.");</a>
<span class="sourceLineNo">197</span><a id="line.197">            securityManager = createDefaultSecurityManager();</a>
<span class="sourceLineNo">198</span><a id="line.198">            setSecurityManager(securityManager);</a>
<span class="sourceLineNo">199</span><a id="line.199">        }</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">    protected WebSecurityManager createDefaultSecurityManager() {</a>
<span class="sourceLineNo">203</span><a id="line.203">        return new DefaultWebSecurityManager();</a>
<span class="sourceLineNo">204</span><a id="line.204">    }</a>
<span class="sourceLineNo">205</span><a id="line.205"></a>
<span class="sourceLineNo">206</span><a id="line.206">    protected boolean isHttpSessions() {</a>
<span class="sourceLineNo">207</span><a id="line.207">        return getSecurityManager().isHttpSessionMode();</a>
<span class="sourceLineNo">208</span><a id="line.208">    }</a>
<span class="sourceLineNo">209</span><a id="line.209"></a>
<span class="sourceLineNo">210</span><a id="line.210">    /**</a>
<span class="sourceLineNo">211</span><a id="line.211">     * Wraps the original HttpServletRequest in a {@link ShiroHttpServletRequest}, which is required for supporting</a>
<span class="sourceLineNo">212</span><a id="line.212">     * Servlet Specification behavior backed by a {@link org.apache.shiro.subject.Subject Subject} instance.</a>
<span class="sourceLineNo">213</span><a id="line.213">     *</a>
<span class="sourceLineNo">214</span><a id="line.214">     * @param orig the original Servlet Container-provided incoming {@code HttpServletRequest} instance.</a>
<span class="sourceLineNo">215</span><a id="line.215">     * @return {@link ShiroHttpServletRequest ShiroHttpServletRequest} instance wrapping the original.</a>
<span class="sourceLineNo">216</span><a id="line.216">     * @since 1.0</a>
<span class="sourceLineNo">217</span><a id="line.217">     */</a>
<span class="sourceLineNo">218</span><a id="line.218">    protected ServletRequest wrapServletRequest(HttpServletRequest orig) {</a>
<span class="sourceLineNo">219</span><a id="line.219">        return new ShiroHttpServletRequest(orig, getServletContext(), isHttpSessions());</a>
<span class="sourceLineNo">220</span><a id="line.220">    }</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">     * Prepares the {@code ServletRequest} instance that will be passed to the {@code FilterChain} for request</a>
<span class="sourceLineNo">224</span><a id="line.224">     * processing.</a>
<span class="sourceLineNo">225</span><a id="line.225">     * &lt;p/&gt;</a>
<span class="sourceLineNo">226</span><a id="line.226">     * If the {@code ServletRequest} is an instance of {@link HttpServletRequest}, the value returned from this method</a>
<span class="sourceLineNo">227</span><a id="line.227">     * is obtained by calling {@link #wrapServletRequest(javax.servlet.http.HttpServletRequest)} to allow Shiro-specific</a>
<span class="sourceLineNo">228</span><a id="line.228">     * HTTP behavior, otherwise the original {@code ServletRequest} argument is returned.</a>
<span class="sourceLineNo">229</span><a id="line.229">     *</a>
<span class="sourceLineNo">230</span><a id="line.230">     * @param request  the incoming ServletRequest</a>
<span class="sourceLineNo">231</span><a id="line.231">     * @param response the outgoing ServletResponse</a>
<span class="sourceLineNo">232</span><a id="line.232">     * @param chain    the Servlet Container provided {@code FilterChain} that will receive the returned request.</a>
<span class="sourceLineNo">233</span><a id="line.233">     * @return the {@code ServletRequest} instance that will be passed to the {@code FilterChain} for request processing.</a>
<span class="sourceLineNo">234</span><a id="line.234">     * @since 1.0</a>
<span class="sourceLineNo">235</span><a id="line.235">     */</a>
<span class="sourceLineNo">236</span><a id="line.236">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">237</span><a id="line.237">    protected ServletRequest prepareServletRequest(ServletRequest request, ServletResponse response, FilterChain chain) {</a>
<span class="sourceLineNo">238</span><a id="line.238">        ServletRequest toUse = request;</a>
<span class="sourceLineNo">239</span><a id="line.239">        if (request instanceof HttpServletRequest) {</a>
<span class="sourceLineNo">240</span><a id="line.240">            HttpServletRequest http = (HttpServletRequest) request;</a>
<span class="sourceLineNo">241</span><a id="line.241">            toUse = wrapServletRequest(http);</a>
<span class="sourceLineNo">242</span><a id="line.242">        }</a>
<span class="sourceLineNo">243</span><a id="line.243">        return toUse;</a>
<span class="sourceLineNo">244</span><a id="line.244">    }</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">     * Returns a new {@link ShiroHttpServletResponse} instance, wrapping the {@code orig} argument, in order to provide</a>
<span class="sourceLineNo">248</span><a id="line.248">     * correct URL rewriting behavior required by the Servlet Specification when using Shiro-based sessions (and not</a>
<span class="sourceLineNo">249</span><a id="line.249">     * Servlet Container HTTP-based sessions).</a>
<span class="sourceLineNo">250</span><a id="line.250">     *</a>
<span class="sourceLineNo">251</span><a id="line.251">     * @param orig    the original {@code HttpServletResponse} instance provided by the Servlet Container.</a>
<span class="sourceLineNo">252</span><a id="line.252">     * @param request the {@code ShiroHttpServletRequest} instance wrapping the original request.</a>
<span class="sourceLineNo">253</span><a id="line.253">     * @return the wrapped ServletResponse instance to use during {@link FilterChain} execution.</a>
<span class="sourceLineNo">254</span><a id="line.254">     * @since 1.0</a>
<span class="sourceLineNo">255</span><a id="line.255">     */</a>
<span class="sourceLineNo">256</span><a id="line.256">    protected ServletResponse wrapServletResponse(HttpServletResponse orig, ShiroHttpServletRequest request) {</a>
<span class="sourceLineNo">257</span><a id="line.257">        return new ShiroHttpServletResponse(orig, getServletContext(), request);</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">     * Prepares the {@code ServletResponse} instance that will be passed to the {@code FilterChain} for request</a>
<span class="sourceLineNo">262</span><a id="line.262">     * processing.</a>
<span class="sourceLineNo">263</span><a id="line.263">     * &lt;p/&gt;</a>
<span class="sourceLineNo">264</span><a id="line.264">     * This implementation delegates to {@link #wrapServletRequest(javax.servlet.http.HttpServletRequest)}</a>
<span class="sourceLineNo">265</span><a id="line.265">     * only if Shiro-based sessions are enabled (that is, !{@link #isHttpSessions()}) and the request instance is a</a>
<span class="sourceLineNo">266</span><a id="line.266">     * {@link ShiroHttpServletRequest}.  This ensures that any URL rewriting that occurs is handled correctly using the</a>
<span class="sourceLineNo">267</span><a id="line.267">     * Shiro-managed Session's sessionId and not a servlet container session ID.</a>
<span class="sourceLineNo">268</span><a id="line.268">     * &lt;p/&gt;</a>
<span class="sourceLineNo">269</span><a id="line.269">     * If HTTP-based sessions are enabled (the default), then this method does nothing and just returns the</a>
<span class="sourceLineNo">270</span><a id="line.270">     * {@code ServletResponse} argument as-is, relying on the default Servlet Container URL rewriting logic.</a>
<span class="sourceLineNo">271</span><a id="line.271">     *</a>
<span class="sourceLineNo">272</span><a id="line.272">     * @param request  the incoming ServletRequest</a>
<span class="sourceLineNo">273</span><a id="line.273">     * @param response the outgoing ServletResponse</a>
<span class="sourceLineNo">274</span><a id="line.274">     * @param chain    the Servlet Container provided {@code FilterChain} that will receive the returned request.</a>
<span class="sourceLineNo">275</span><a id="line.275">     * @return the {@code ServletResponse} instance that will be passed to the {@code FilterChain} during request processing.</a>
<span class="sourceLineNo">276</span><a id="line.276">     * @since 1.0</a>
<span class="sourceLineNo">277</span><a id="line.277">     */</a>
<span class="sourceLineNo">278</span><a id="line.278">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">279</span><a id="line.279">    protected ServletResponse prepareServletResponse(ServletRequest request, ServletResponse response, FilterChain chain) {</a>
<span class="sourceLineNo">280</span><a id="line.280">        ServletResponse toUse = response;</a>
<span class="sourceLineNo">281</span><a id="line.281">        if (!isHttpSessions() &amp;&amp; (request instanceof ShiroHttpServletRequest) &amp;&amp;</a>
<span class="sourceLineNo">282</span><a id="line.282">                (response instanceof HttpServletResponse)) {</a>
<span class="sourceLineNo">283</span><a id="line.283">            //the ShiroHttpServletResponse exists to support URL rewriting for session ids.  This is only needed if</a>
<span class="sourceLineNo">284</span><a id="line.284">            //using Shiro sessions (i.e. not simple HttpSession based sessions):</a>
<span class="sourceLineNo">285</span><a id="line.285">            toUse = wrapServletResponse((HttpServletResponse) response, (ShiroHttpServletRequest) request);</a>
<span class="sourceLineNo">286</span><a id="line.286">        }</a>
<span class="sourceLineNo">287</span><a id="line.287">        return toUse;</a>
<span class="sourceLineNo">288</span><a id="line.288">    }</a>
<span class="sourceLineNo">289</span><a id="line.289"></a>
<span class="sourceLineNo">290</span><a id="line.290">    /**</a>
<span class="sourceLineNo">291</span><a id="line.291">     * Creates a {@link WebSubject} instance to associate with the incoming request/response pair which will be used</a>
<span class="sourceLineNo">292</span><a id="line.292">     * throughout the request/response execution.</a>
<span class="sourceLineNo">293</span><a id="line.293">     *</a>
<span class="sourceLineNo">294</span><a id="line.294">     * @param request  the incoming {@code ServletRequest}</a>
<span class="sourceLineNo">295</span><a id="line.295">     * @param response the outgoing {@code ServletResponse}</a>
<span class="sourceLineNo">296</span><a id="line.296">     * @return the {@code WebSubject} instance to associate with the request/response execution</a>
<span class="sourceLineNo">297</span><a id="line.297">     * @since 1.0</a>
<span class="sourceLineNo">298</span><a id="line.298">     */</a>
<span class="sourceLineNo">299</span><a id="line.299">    protected WebSubject createSubject(ServletRequest request, ServletResponse response) {</a>
<span class="sourceLineNo">300</span><a id="line.300">        return new WebSubject.Builder(getSecurityManager(), request, response).buildWebSubject();</a>
<span class="sourceLineNo">301</span><a id="line.301">    }</a>
<span class="sourceLineNo">302</span><a id="line.302"></a>
<span class="sourceLineNo">303</span><a id="line.303">    /**</a>
<span class="sourceLineNo">304</span><a id="line.304">     * Updates any 'native'  Session's last access time that might exist to the timestamp when this method is called.</a>
<span class="sourceLineNo">305</span><a id="line.305">     * If native sessions are not enabled (that is, standard Servlet container sessions are being used) or there is no</a>
<span class="sourceLineNo">306</span><a id="line.306">     * session ({@code subject.getSession(false) == null}), this method does nothing.</a>
<span class="sourceLineNo">307</span><a id="line.307">     * &lt;p/&gt;This method implementation merely calls</a>
<span class="sourceLineNo">308</span><a id="line.308">     * &lt;code&gt;Session.{@link org.apache.shiro.session.Session#touch() touch}()&lt;/code&gt; on the session.</a>
<span class="sourceLineNo">309</span><a id="line.309">     *</a>
<span class="sourceLineNo">310</span><a id="line.310">     * @param request  incoming request - ignored, but available to subclasses that might wish to override this method</a>
<span class="sourceLineNo">311</span><a id="line.311">     * @param response outgoing response - ignored, but available to subclasses that might wish to override this method</a>
<span class="sourceLineNo">312</span><a id="line.312">     * @since 1.0</a>
<span class="sourceLineNo">313</span><a id="line.313">     */</a>
<span class="sourceLineNo">314</span><a id="line.314">    @SuppressWarnings({"UnusedDeclaration"})</a>
<span class="sourceLineNo">315</span><a id="line.315">    protected void updateSessionLastAccessTime(ServletRequest request, ServletResponse response) {</a>
<span class="sourceLineNo">316</span><a id="line.316">        if (!isHttpSessions()) { //'native' sessions</a>
<span class="sourceLineNo">317</span><a id="line.317">            Subject subject = SecurityUtils.getSubject();</a>
<span class="sourceLineNo">318</span><a id="line.318">            //Subject should never _ever_ be null, but just in case:</a>
<span class="sourceLineNo">319</span><a id="line.319">            if (subject != null) {</a>
<span class="sourceLineNo">320</span><a id="line.320">                Session session = subject.getSession(false);</a>
<span class="sourceLineNo">321</span><a id="line.321">                if (session != null) {</a>
<span class="sourceLineNo">322</span><a id="line.322">                    try {</a>
<span class="sourceLineNo">323</span><a id="line.323">                        session.touch();</a>
<span class="sourceLineNo">324</span><a id="line.324">                    } catch (Throwable t) {</a>
<span class="sourceLineNo">325</span><a id="line.325">                        log.error("session.touch() method invocation has failed.  Unable to update " +</a>
<span class="sourceLineNo">326</span><a id="line.326">                                "the corresponding session's last access time based on the incoming request.", t);</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">            }</a>
<span class="sourceLineNo">330</span><a id="line.330">        }</a>
<span class="sourceLineNo">331</span><a id="line.331">    }</a>
<span class="sourceLineNo">332</span><a id="line.332"></a>
<span class="sourceLineNo">333</span><a id="line.333">    /**</a>
<span class="sourceLineNo">334</span><a id="line.334">     * {@code doFilterInternal} implementation that sets-up, executes, and cleans-up a Shiro-filtered request.  It</a>
<span class="sourceLineNo">335</span><a id="line.335">     * performs the following ordered operations:</a>
<span class="sourceLineNo">336</span><a id="line.336">     * &lt;ol&gt;</a>
<span class="sourceLineNo">337</span><a id="line.337">     * &lt;li&gt;{@link #prepareServletRequest(ServletRequest, ServletResponse, FilterChain) Prepares}</a>
<span class="sourceLineNo">338</span><a id="line.338">     * the incoming {@code ServletRequest} for use during Shiro's processing&lt;/li&gt;</a>
<span class="sourceLineNo">339</span><a id="line.339">     * &lt;li&gt;{@link #prepareServletResponse(ServletRequest, ServletResponse, FilterChain) Prepares}</a>
<span class="sourceLineNo">340</span><a id="line.340">     * the outgoing {@code ServletResponse} for use during Shiro's processing&lt;/li&gt;</a>
<span class="sourceLineNo">341</span><a id="line.341">     * &lt;li&gt; {@link #createSubject(javax.servlet.ServletRequest, javax.servlet.ServletResponse) Creates} a</a>
<span class="sourceLineNo">342</span><a id="line.342">     * {@link Subject} instance based on the specified request/response pair.&lt;/li&gt;</a>
<span class="sourceLineNo">343</span><a id="line.343">     * &lt;li&gt;Finally {@link Subject#execute(Runnable) executes} the</a>
<span class="sourceLineNo">344</span><a id="line.344">     * {@link #updateSessionLastAccessTime(javax.servlet.ServletRequest, javax.servlet.ServletResponse)} and</a>
<span class="sourceLineNo">345</span><a id="line.345">     * {@link #executeChain(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)}</a>
<span class="sourceLineNo">346</span><a id="line.346">     * methods&lt;/li&gt;</a>
<span class="sourceLineNo">347</span><a id="line.347">     * &lt;/ol&gt;</a>
<span class="sourceLineNo">348</span><a id="line.348">     * &lt;p/&gt;</a>
<span class="sourceLineNo">349</span><a id="line.349">     * The {@code Subject.}{@link Subject#execute(Runnable) execute(Runnable)} call in step #4 is used as an</a>
<span class="sourceLineNo">350</span><a id="line.350">     * implementation technique to guarantee proper thread binding and restoration is completed successfully.</a>
<span class="sourceLineNo">351</span><a id="line.351">     *</a>
<span class="sourceLineNo">352</span><a id="line.352">     * @param servletRequest  the incoming {@code ServletRequest}</a>
<span class="sourceLineNo">353</span><a id="line.353">     * @param servletResponse the outgoing {@code ServletResponse}</a>
<span class="sourceLineNo">354</span><a id="line.354">     * @param chain           the container-provided {@code FilterChain} to execute</a>
<span class="sourceLineNo">355</span><a id="line.355">     * @throws IOException                    if an IO error occurs</a>
<span class="sourceLineNo">356</span><a id="line.356">     * @throws javax.servlet.ServletException if an Throwable other than an IOException</a>
<span class="sourceLineNo">357</span><a id="line.357">     */</a>
<span class="sourceLineNo">358</span><a id="line.358">    protected void doFilterInternal(ServletRequest servletRequest, ServletResponse servletResponse, final FilterChain chain)</a>
<span class="sourceLineNo">359</span><a id="line.359">            throws ServletException, IOException {</a>
<span class="sourceLineNo">360</span><a id="line.360"></a>
<span class="sourceLineNo">361</span><a id="line.361">        Throwable t = null;</a>
<span class="sourceLineNo">362</span><a id="line.362"></a>
<span class="sourceLineNo">363</span><a id="line.363">        try {</a>
<span class="sourceLineNo">364</span><a id="line.364">            final ServletRequest request = prepareServletRequest(servletRequest, servletResponse, chain);</a>
<span class="sourceLineNo">365</span><a id="line.365">            final ServletResponse response = prepareServletResponse(request, servletResponse, chain);</a>
<span class="sourceLineNo">366</span><a id="line.366"></a>
<span class="sourceLineNo">367</span><a id="line.367">            final Subject subject = createSubject(request, response);</a>
<span class="sourceLineNo">368</span><a id="line.368"></a>
<span class="sourceLineNo">369</span><a id="line.369">            //noinspection unchecked</a>
<span class="sourceLineNo">370</span><a id="line.370">            subject.execute(new Callable() {</a>
<span class="sourceLineNo">371</span><a id="line.371">                public Object call() throws Exception {</a>
<span class="sourceLineNo">372</span><a id="line.372">                    updateSessionLastAccessTime(request, response);</a>
<span class="sourceLineNo">373</span><a id="line.373">                    executeChain(request, response, chain);</a>
<span class="sourceLineNo">374</span><a id="line.374">                    return null;</a>
<span class="sourceLineNo">375</span><a id="line.375">                }</a>
<span class="sourceLineNo">376</span><a id="line.376">            });</a>
<span class="sourceLineNo">377</span><a id="line.377">        } catch (ExecutionException ex) {</a>
<span class="sourceLineNo">378</span><a id="line.378">            t = ex.getCause();</a>
<span class="sourceLineNo">379</span><a id="line.379">        } catch (Throwable throwable) {</a>
<span class="sourceLineNo">380</span><a id="line.380">            t = throwable;</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">        if (t != null) {</a>
<span class="sourceLineNo">384</span><a id="line.384">            if (t instanceof ServletException) {</a>
<span class="sourceLineNo">385</span><a id="line.385">                throw (ServletException) t;</a>
<span class="sourceLineNo">386</span><a id="line.386">            }</a>
<span class="sourceLineNo">387</span><a id="line.387">            if (t instanceof IOException) {</a>
<span class="sourceLineNo">388</span><a id="line.388">                throw (IOException) t;</a>
<span class="sourceLineNo">389</span><a id="line.389">            }</a>
<span class="sourceLineNo">390</span><a id="line.390">            //otherwise it's not one of the two exceptions expected by the filter method signature - wrap it in one:</a>
<span class="sourceLineNo">391</span><a id="line.391">            String msg = "Filtered request failed.";</a>
<span class="sourceLineNo">392</span><a id="line.392">            throw new ServletException(msg, t);</a>
<span class="sourceLineNo">393</span><a id="line.393">        }</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">     * Returns the {@code FilterChain} to execute for the given request.</a>
<span class="sourceLineNo">398</span><a id="line.398">     * &lt;p/&gt;</a>
<span class="sourceLineNo">399</span><a id="line.399">     * The {@code origChain} argument is the</a>
<span class="sourceLineNo">400</span><a id="line.400">     * original {@code FilterChain} supplied by the Servlet Container, but it may be modified to provide</a>
<span class="sourceLineNo">401</span><a id="line.401">     * more behavior by pre-pending further chains according to the Shiro configuration.</a>
<span class="sourceLineNo">402</span><a id="line.402">     * &lt;p/&gt;</a>
<span class="sourceLineNo">403</span><a id="line.403">     * This implementation returns the chain that will actually be executed by acquiring the chain from a</a>
<span class="sourceLineNo">404</span><a id="line.404">     * {@link #getFilterChainResolver() filterChainResolver}.  The resolver determines exactly which chain to</a>
<span class="sourceLineNo">405</span><a id="line.405">     * execute, typically based on URL configuration.  If no chain is returned from the resolver call</a>
<span class="sourceLineNo">406</span><a id="line.406">     * (returns {@code null}), then the {@code origChain} will be returned by default.</a>
<span class="sourceLineNo">407</span><a id="line.407">     *</a>
<span class="sourceLineNo">408</span><a id="line.408">     * @param request   the incoming ServletRequest</a>
<span class="sourceLineNo">409</span><a id="line.409">     * @param response  the outgoing ServletResponse</a>
<span class="sourceLineNo">410</span><a id="line.410">     * @param origChain the original {@code FilterChain} provided by the Servlet Container</a>
<span class="sourceLineNo">411</span><a id="line.411">     * @return the {@link FilterChain} to execute for the given request</a>
<span class="sourceLineNo">412</span><a id="line.412">     * @since 1.0</a>
<span class="sourceLineNo">413</span><a id="line.413">     */</a>
<span class="sourceLineNo">414</span><a id="line.414">    protected FilterChain getExecutionChain(ServletRequest request, ServletResponse response, FilterChain origChain) {</a>
<span class="sourceLineNo">415</span><a id="line.415"></a>
<span class="sourceLineNo">416</span><a id="line.416">        FilterChain chain = origChain;</a>
<span class="sourceLineNo">417</span><a id="line.417"></a>
<span class="sourceLineNo">418</span><a id="line.418">        FilterChainResolver resolver = getFilterChainResolver();</a>
<span class="sourceLineNo">419</span><a id="line.419">        if (resolver == null) {</a>
<span class="sourceLineNo">420</span><a id="line.420">            log.debug("No FilterChainResolver configured.  Returning original FilterChain.");</a>
<span class="sourceLineNo">421</span><a id="line.421">            return origChain;</a>
<span class="sourceLineNo">422</span><a id="line.422">        }</a>
<span class="sourceLineNo">423</span><a id="line.423"></a>
<span class="sourceLineNo">424</span><a id="line.424">        FilterChain resolved = resolver.getChain(request, response, origChain);</a>
<span class="sourceLineNo">425</span><a id="line.425">        if (resolved != null) {</a>
<span class="sourceLineNo">426</span><a id="line.426">            log.trace("Resolved a configured FilterChain for the current request.");</a>
<span class="sourceLineNo">427</span><a id="line.427">            chain = resolved;</a>
<span class="sourceLineNo">428</span><a id="line.428">        } else {</a>
<span class="sourceLineNo">429</span><a id="line.429">            log.trace("No FilterChain configured for the current request.  Using the default.");</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">        return chain;</a>
<span class="sourceLineNo">433</span><a id="line.433">    }</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">     * Executes a {@link FilterChain} for the given request.</a>
<span class="sourceLineNo">437</span><a id="line.437">     * &lt;p/&gt;</a>
<span class="sourceLineNo">438</span><a id="line.438">     * This implementation first delegates to</a>
<span class="sourceLineNo">439</span><a id="line.439">     * &lt;code&gt;{@link #getExecutionChain(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) getExecutionChain}&lt;/code&gt;</a>
<span class="sourceLineNo">440</span><a id="line.440">     * to allow the application's Shiro configuration to determine exactly how the chain should execute.  The resulting</a>
<span class="sourceLineNo">441</span><a id="line.441">     * value from that call is then executed directly by calling the returned {@code FilterChain}'s</a>
<span class="sourceLineNo">442</span><a id="line.442">     * {@link FilterChain#doFilter doFilter} method.  That is:</a>
<span class="sourceLineNo">443</span><a id="line.443">     * &lt;pre&gt;</a>
<span class="sourceLineNo">444</span><a id="line.444">     * FilterChain chain = {@link #getExecutionChain}(request, response, origChain);</a>
<span class="sourceLineNo">445</span><a id="line.445">     * chain.{@link FilterChain#doFilter doFilter}(request,response);&lt;/pre&gt;</a>
<span class="sourceLineNo">446</span><a id="line.446">     *</a>
<span class="sourceLineNo">447</span><a id="line.447">     * @param request   the incoming ServletRequest</a>
<span class="sourceLineNo">448</span><a id="line.448">     * @param response  the outgoing ServletResponse</a>
<span class="sourceLineNo">449</span><a id="line.449">     * @param origChain the Servlet Container-provided chain that may be wrapped further by an application-configured</a>
<span class="sourceLineNo">450</span><a id="line.450">     *                  chain of Filters.</a>
<span class="sourceLineNo">451</span><a id="line.451">     * @throws IOException      if the underlying {@code chain.doFilter} call results in an IOException</a>
<span class="sourceLineNo">452</span><a id="line.452">     * @throws ServletException if the underlying {@code chain.doFilter} call results in a ServletException</a>
<span class="sourceLineNo">453</span><a id="line.453">     * @since 1.0</a>
<span class="sourceLineNo">454</span><a id="line.454">     */</a>
<span class="sourceLineNo">455</span><a id="line.455">    protected void executeChain(ServletRequest request, ServletResponse response, FilterChain origChain)</a>
<span class="sourceLineNo">456</span><a id="line.456">            throws IOException, ServletException {</a>
<span class="sourceLineNo">457</span><a id="line.457">        FilterChain chain = getExecutionChain(request, response, origChain);</a>
<span class="sourceLineNo">458</span><a id="line.458">        chain.doFilter(request, response);</a>
<span class="sourceLineNo">459</span><a id="line.459">    }</a>
<span class="sourceLineNo">460</span><a id="line.460">}</a>




























































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