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 */ 019package org.apache.shiro.web.filter.mgt; 020 021import org.apache.shiro.lang.util.ClassUtils; 022import org.apache.shiro.web.filter.InvalidRequestFilter; 023import org.apache.shiro.web.filter.authc.AnonymousFilter; 024import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; 025import org.apache.shiro.web.filter.authc.BearerHttpAuthenticationFilter; 026import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; 027import org.apache.shiro.web.filter.authc.LogoutFilter; 028import org.apache.shiro.web.filter.authc.UserFilter; 029import org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter; 030import org.apache.shiro.web.filter.authz.IpFilter; 031import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter; 032import org.apache.shiro.web.filter.authz.PortFilter; 033import org.apache.shiro.web.filter.authz.RolesAuthorizationFilter; 034import org.apache.shiro.web.filter.authz.SslFilter; 035import org.apache.shiro.web.filter.session.NoSessionCreationFilter; 036 037import javax.servlet.Filter; 038import javax.servlet.FilterConfig; 039import javax.servlet.ServletException; 040import java.util.LinkedHashMap; 041import java.util.Map; 042 043/** 044 * Enum representing all of the default Shiro Filter instances available to web applications. Each filter instance is 045 * typically accessible in configuration the {@link #name() name} of the enum constant. 046 * 047 * @since 1.0 048 */ 049public enum DefaultFilter { 050 051 /** 052 * anno filter 053 */ 054 anon(AnonymousFilter.class), 055 056 /** 057 * authc filter. 058 */ 059 authc(FormAuthenticationFilter.class), 060 061 /** 062 * authc basic filter. 063 */ 064 authcBasic(BasicHttpAuthenticationFilter.class), 065 066 /** 067 * authc bearer filter. 068 */ 069 authcBearer(BearerHttpAuthenticationFilter.class), 070 071 /** 072 * ip filter. 073 */ 074 ip(IpFilter.class), 075 076 /** 077 * logout filter. 078 */ 079 logout(LogoutFilter.class), 080 081 /** 082 * no session creation filter. 083 */ 084 noSessionCreation(NoSessionCreationFilter.class), 085 086 /** 087 * perms filter. 088 */ 089 perms(PermissionsAuthorizationFilter.class), 090 091 /** 092 * port filter. 093 */ 094 port(PortFilter.class), 095 096 /** 097 * rest filter. 098 */ 099 rest(HttpMethodPermissionFilter.class), 100 101 /** 102 * roles filter. 103 */ 104 roles(RolesAuthorizationFilter.class), 105 106 /** 107 * ssl filter. 108 */ 109 ssl(SslFilter.class), 110 111 /** 112 * user filter. 113 */ 114 user(UserFilter.class), 115 116 /** 117 * invalid request filter. 118 */ 119 invalidRequest(InvalidRequestFilter.class); 120 121 private final Class<? extends Filter> filterClass; 122 123 DefaultFilter(Class<? extends Filter> filterClass) { 124 this.filterClass = filterClass; 125 } 126 127 public Filter newInstance() { 128 return (Filter) ClassUtils.newInstance(this.filterClass); 129 } 130 131 public Class<? extends Filter> getFilterClass() { 132 return this.filterClass; 133 } 134 135 public static Map<String, Filter> createInstanceMap(FilterConfig config) { 136 Map<String, Filter> filters = new LinkedHashMap<String, Filter>(values().length); 137 for (DefaultFilter defaultFilter : values()) { 138 Filter filter = defaultFilter.newInstance(); 139 if (config != null) { 140 try { 141 filter.init(config); 142 } catch (ServletException e) { 143 String msg = "Unable to correctly init default filter instance of type " 144 + filter.getClass().getName(); 145 throw new IllegalStateException(msg, e); 146 } 147 } 148 filters.put(defaultFilter.name(), filter); 149 } 150 return filters; 151 } 152}