View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.shiro.web.filter.mgt;
20  
21  import org.apache.shiro.util.ClassUtils;
22  import org.apache.shiro.web.filter.InvalidRequestFilter;
23  import org.apache.shiro.web.filter.authc.*;
24  import org.apache.shiro.web.filter.authz.*;
25  import org.apache.shiro.web.filter.session.NoSessionCreationFilter;
26  
27  import javax.servlet.Filter;
28  import javax.servlet.FilterConfig;
29  import javax.servlet.ServletException;
30  import java.util.LinkedHashMap;
31  import java.util.Map;
32  
33  /**
34   * Enum representing all of the default Shiro Filter instances available to web applications.  Each filter instance is
35   * typically accessible in configuration the {@link #name() name} of the enum constant.
36   *
37   * @since 1.0
38   */
39  public enum DefaultFilter {
40  
41      anon(AnonymousFilter.class),
42      authc(FormAuthenticationFilter.class),
43      authcBasic(BasicHttpAuthenticationFilter.class),
44      authcBearer(BearerHttpAuthenticationFilter.class),
45      logout(LogoutFilter.class),
46      noSessionCreation(NoSessionCreationFilter.class),
47      perms(PermissionsAuthorizationFilter.class),
48      port(PortFilter.class),
49      rest(HttpMethodPermissionFilter.class),
50      roles(RolesAuthorizationFilter.class),
51      ssl(SslFilter.class),
52      user(UserFilter.class),
53      invalidRequest(InvalidRequestFilter.class);
54  
55      private final Class<? extends Filter> filterClass;
56  
57      private DefaultFilter(Class<? extends Filter> filterClass) {
58          this.filterClass = filterClass;
59      }
60  
61      public Filter newInstance() {
62          return (Filter) ClassUtils.newInstance(this.filterClass);
63      }
64  
65      public Class<? extends Filter> getFilterClass() {
66          return this.filterClass;
67      }
68  
69      public static Map<String, Filter> createInstanceMap(FilterConfig config) {
70          Map<String, Filter> filters = new LinkedHashMap<String, Filter>(values().length);
71          for (DefaultFilter defaultFilter : values()) {
72              Filter filter = defaultFilter.newInstance();
73              if (config != null) {
74                  try {
75                      filter.init(config);
76                  } catch (ServletException e) {
77                      String msg = "Unable to correctly init default filter instance of type " +
78                              filter.getClass().getName();
79                      throw new IllegalStateException(msg, e);
80                  }
81              }
82              filters.put(defaultFilter.name(), filter);
83          }
84          return filters;
85      }
86  }