blob: 62d7f98e3b4bf59e558d414a0e159ece7bbe4bcb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sling.servlets.annotations;
import org.apache.sling.api.servlets.ServletResolverConstants;
import org.osgi.service.component.annotations.ComponentPropertyType;
import org.osgi.service.component.propertytypes.ServiceRanking;
/**
* Component Property Type (as defined by OSGi DS 1.4) for Sling Servlet Filters.
* Takes care of writing the relevant service properties as being used by the Sling Servlet Resolver
* ({@link ServletResolverConstants}) to register the annotated servlet filter component as
* Sling servlet filter.
* <br><br>
* The order of the filter is determined by the property {@code service.ranking}. To set it use the annotation {@link ServiceRanking}. Its value is used to sort the filters.
* Filters with a higher order are executed before a filter with a lower order. If two filters have the same order,
* the one with the lower service id is executed first.
* <br>
* <br>
* Please note that the ordering is actually depending on the used Apache Sling Engine bundle version. Version older than 2.3.4 of that
* bundle are sorting the filters in the wrong reverse order. Make sure to run a newer version of the Sling engine to get the correct
* ordering (see also <a href="https://issues.apache.org/jira/browse/SLING-2920">SLING-2920</a>).
*
* @see <a href=
* "https://github.com/apache/felix/blob/trunk/tools/org.apache.felix.scr.annotations/src/main/java/org/apache/felix/scr/annotations/sling/SlingFilter.java">Felix
* SCR annotation</a>
* @see <a href="https://sling.apache.org/documentation/the-sling-engine/filters.html">Sling Servlet Filter</a>
*/
@ComponentPropertyType
public @interface SlingServletFilter {
/**
* Prefix for every property being generated from the annotations elements (as defined in OSGi 7 Compendium, 112.8.2.1)
*/
static final String PREFIX_ = "sling.filter.";
/**
* The scopes of the filter. If the filter has request scope, it is run once for a request. If the filter has component scope, it is run
* once for every included component (rendering).
* @return the scope of the filter
*/
SlingServletFilterScope[] scope() default SlingServletFilterScope.REQUEST;
/**
* Restrict the filter to request paths that match the supplied regular expression.
* Empty value will not restrict the filter on request path. Requires Sling Engine 2.4.0.
* @return the request path pattern to restrict the filter
*/
String pattern() default "";
/**
* Restrict the filter to request suffixes that match the supplied regular expression.
* Empty value will not restrict the filter on request suffix. Requires Sling Engine 2.7.0.
* @return the suffix pattern to restrict the filter
*/
String suffix_pattern() default "";
/**
* Restrict the filter to resources that match any of the supplied resource types.
* Please note this is a sling resource API <code>isResourceType()</code> match, not a string match.
* Empty value will not restrict the filter on request's resource type. Requires Sling Engine 2.7.0.
* @return the resourceTypes to restrict the filter
*/
String[] resourceTypes() default {};
/**
* Restrict the filter to methods that match request's.
* Empty value will not restrict the filter on request method. Requires Sling Engine 2.7.0.
* @return the methods to restrict the filter
*/
String[] methods() default {};
/**
* Restrict the filter to extensions that match request's.
* Empty value will not restrict the filter on request extension. Requires Sling Engine 2.7.0.
* @return the extensions to restrict the filter
*/
String[] extensions() default {};
/**
* Restrict the filter to request selectors that match any of the request's.
* At least one selector must match one of the provided selectors.
* Empty value will not restrict the filter on request selectors. Requires Sling Engine 2.7.0.
* @return the selectors to restrict the filter
*/
String[] selectors() default {};
}