From 428a0b7dceb42fc9f2cafc9da4598eafffe99b91 Mon Sep 17 00:00:00 2001 From: Luke Taylor Date: Mon, 20 Dec 2010 14:13:13 +0000 Subject: [PATCH] SEC-1639: Removed url argument from FilterChainProxy's VirtualFilterChain, since this can be directly computed from the request instance in the debug statements. --- .../security/web/FilterChainProxy.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/web/src/main/java/org/springframework/security/web/FilterChainProxy.java b/web/src/main/java/org/springframework/security/web/FilterChainProxy.java index f7cd7b14ac..85b784d75f 100644 --- a/web/src/main/java/org/springframework/security/web/FilterChainProxy.java +++ b/web/src/main/java/org/springframework/security/web/FilterChainProxy.java @@ -59,7 +59,7 @@ import java.util.*; * Ant-style paths}. An example configuration might look like this: * *
- <bean id="myfilterChainProxy" class="org.springframework.security.util.FilterChainProxy">
+ <bean id="myfilterChainProxy" class="org.springframework.security.util.FilterChjainProxy">
      <security:filter-chain-map request-matcher="ant">
          <security:filter-chain pattern="/do/not/filter*" filters="none"/>
          <security:filter-chain pattern="/**" filters="filter1,filter2,filter3"/>
@@ -102,7 +102,10 @@ import java.util.*;
  * response. When the request has passed through the security filter chain, the {@code reset} method will be called.
  * With the default implementation this means that the original values of {@code servletPath} and {@code pathInfo} will
  * be returned thereafter, instead of the modified ones used for security pattern matching.
- *
+ * 

+ * Since this additional wrapping functionality is performed by the {@code FilterChainProxy}, we don't recommend that + * you use multiple instances in the same filter chain. It shouldn't be considered purely as a utility for wrapping + * filter beans in a single {@code Filter} instance. * *

Filter Lifecycle

*

@@ -142,13 +145,12 @@ public class FilterChainProxy extends GenericFilterBean { FirewalledRequest fwRequest = firewall.getFirewalledRequest((HttpServletRequest) request); HttpServletResponse fwResponse = firewall.getFirewalledResponse((HttpServletResponse) response); - String url = UrlUtils.buildRequestUrl(fwRequest); List filters = getFilters(fwRequest); if (filters == null || filters.size() == 0) { if (logger.isDebugEnabled()) { - logger.debug(url + + logger.debug(UrlUtils.buildRequestUrl(fwRequest) + (filters == null ? " has no matching filters" : " has an empty filter list")); } @@ -159,7 +161,7 @@ public class FilterChainProxy extends GenericFilterBean { return; } - VirtualFilterChain vfc = new VirtualFilterChain(url, chain, filters, fwRequest); + VirtualFilterChain vfc = new VirtualFilterChain(fwRequest, chain, filters); vfc.doFilter(fwRequest, fwResponse); } @@ -287,13 +289,11 @@ public class FilterChainProxy extends GenericFilterBean { private final FilterChain originalChain; private final List additionalFilters; private final FirewalledRequest firewalledRequest; - private final String url; private final int size; private int currentPosition = 0; - private VirtualFilterChain(String url, FilterChain chain, List additionalFilters, FirewalledRequest firewalledRequest) { + private VirtualFilterChain(FirewalledRequest firewalledRequest, FilterChain chain, List additionalFilters) { this.originalChain = chain; - this.url = url; this.additionalFilters = additionalFilters; this.size = additionalFilters.size(); this.firewalledRequest = firewalledRequest; @@ -302,7 +302,8 @@ public class FilterChainProxy extends GenericFilterBean { public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { if (currentPosition == size) { if (logger.isDebugEnabled()) { - logger.debug(url + " reached end of additional filter chain; proceeding with original chain"); + logger.debug(UrlUtils.buildRequestUrl(firewalledRequest) + + " reached end of additional filter chain; proceeding with original chain"); } // Deactivate path stripping as we exit the security filter chain @@ -315,7 +316,7 @@ public class FilterChainProxy extends GenericFilterBean { Filter nextFilter = additionalFilters.get(currentPosition - 1); if (logger.isDebugEnabled()) { - logger.debug(url + " at position " + currentPosition + " of " + logger.debug(UrlUtils.buildRequestUrl(firewalledRequest) + " at position " + currentPosition + " of " + size + " in additional filter chain; firing Filter: '" + nextFilter.getClass().getSimpleName() + "'"); }