001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019 package org.apache.shiro.web.filter.mgt;
020
021 import org.apache.shiro.util.ClassUtils;
022 import org.apache.shiro.web.filter.authc.AnonymousFilter;
023 import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter;
024 import org.apache.shiro.web.filter.authc.FormAuthenticationFilter;
025 import org.apache.shiro.web.filter.authc.UserFilter;
026 import org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter;
027 import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;
028 import org.apache.shiro.web.filter.authz.PortFilter;
029 import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter;
030 import org.apache.shiro.web.filter.authz.SslFilter;
031
032 import javax.servlet.Filter;
033 import javax.servlet.FilterConfig;
034 import javax.servlet.ServletException;
035 import java.util.LinkedHashMap;
036 import java.util.Map;
037
038 /**
039 * Enum representing all of the default Shiro Filter instances available to web applications. Each filter instance is
040 * typically accessible in configuration the {@link #name() name} of the enum constant.
041 *
042 * @since 1.0
043 */
044 public enum DefaultFilter {
045
046 anon(AnonymousFilter.class),
047 authc(FormAuthenticationFilter.class),
048 authcBasic(BasicHttpAuthenticationFilter.class),
049 perms(PermissionsAuthorizationFilter.class),
050 port(PortFilter.class),
051 rest(HttpMethodPermissionFilter.class),
052 roles(RolesAuthorizationFilter.class),
053 ssl(SslFilter.class),
054 user(UserFilter.class);
055
056 private final Class<? extends Filter> filterClass;
057
058 private DefaultFilter(Class<? extends Filter> filterClass) {
059 this.filterClass = filterClass;
060 }
061
062 public Filter newInstance() {
063 return (Filter) ClassUtils.newInstance(this.filterClass);
064 }
065
066 public Class<? extends Filter> getFilterClass() {
067 return this.filterClass;
068 }
069
070 public static Map<String, Filter> createInstanceMap(FilterConfig config) {
071 Map<String, Filter> filters = new LinkedHashMap<String, Filter>(values().length);
072 for (DefaultFilter defaultFilter : values()) {
073 Filter filter = defaultFilter.newInstance();
074 if (config != null) {
075 try {
076 filter.init(config);
077 } catch (ServletException e) {
078 String msg = "Unable to correctly init default filter instance of type " +
079 filter.getClass().getName();
080 throw new IllegalStateException(msg, e);
081 }
082 }
083 filters.put(defaultFilter.name(), filter);
084 }
085 return filters;
086 }
087 }