View Javadoc

1   package org.springframework.security.intercept.web;
2   
3   import org.springframework.context.ApplicationContext;
4   import org.springframework.util.Assert;
5   import org.springframework.security.ConfigAttribute;
6   import org.springframework.security.ConfigAttributeDefinition;
7   import org.springframework.security.util.FilterChainProxy;
8   import org.springframework.security.util.UrlMatcher;
9   
10  import javax.servlet.Filter;
11  import java.util.*;
12  import java.util.regex.Pattern;
13  
14  /**
15   * Used internally to provide backward compatibility for configuration of FilterChainProxy using a
16   * FilterInvocationDefinitionSource. This is deprecated in favour of namespace-based configuration.
17   *
18   * This class will convert a FilterInvocationDefinitionSource into a suitable Map, provided it is one of the
19   * recognised implementations (ant path or regular expression). The order of the mappings will be
20   * preserved in the Map.
21   *
22   * @author Luke Taylor
23   * @version $Id: FIDSToFilterChainMapConverter.java 2557 2008-01-30 15:17:30Z luke_t $
24   */
25  public class FIDSToFilterChainMapConverter {
26  
27      private LinkedHashMap filterChainMap = new LinkedHashMap();
28      private UrlMatcher matcher;
29  
30      public FIDSToFilterChainMapConverter(DefaultFilterInvocationDefinitionSource fids, ApplicationContext appContext) {
31          // TODO: Check if this is necessary. Retained from refactoring of FilterChainProxy
32          Assert.notNull(fids.getConfigAttributeDefinitions(), "FilterChainProxy requires the " +
33                  "FilterInvocationDefinitionSource to return a non-null response to getConfigAttributeDefinitions()");
34          matcher = fids.getUrlMatcher();
35          Map requestMap = fids.getRequestMap();
36          Iterator paths = requestMap.keySet().iterator();
37  
38          while (paths.hasNext()) {
39              Object entry = paths.next();
40              String path = entry instanceof Pattern ? ((Pattern)entry).pattern() : (String)entry;
41              ConfigAttributeDefinition configAttributeDefinition = (ConfigAttributeDefinition) requestMap.get(entry);
42  
43              List filters = new ArrayList();
44              Iterator attributes = configAttributeDefinition.getConfigAttributes().iterator();
45  
46              while (attributes.hasNext()) {
47                  ConfigAttribute attr = (ConfigAttribute) attributes.next();
48                  String filterName = attr.getAttribute();
49  
50                  Assert.notNull(filterName, "Configuration attribute: '" + attr + "' returned null to the getAttribute() " +
51                          "method, which is invalid when used with FilterChainProxy");
52  
53                  if (!filterName.equals(FilterChainProxy.TOKEN_NONE)) {
54                      filters.add(appContext.getBean(filterName, Filter.class));
55                  }
56              }
57  
58              filterChainMap.put(path, filters);
59          }
60      }
61  
62      public Map getFilterChainMap() {
63          return filterChainMap;
64      }
65  
66      public UrlMatcher getMatcher() {
67          return matcher;
68      }
69  }